我认为我在做一些非常低效的事情,但我正在尝试制作一个测试方法来检查我的containsOpposites方法是否有效。我相信containsOpposites方法确实有效,但main方法只返回true,即使数组中不包含相反的元素。我做错了什么?
boolean containsOpposites(int[] a) {
for (int i=0;i<a.length; i++){
for (int k= i+1; k<a.length; k++){
if (a[i]== -a[k]){ return true;
}
}
}
return false;
}
String test (int []a) {
if (containsOpposites(a)) {return "true";}
else return "false";
}
public void main (String[] args) {
int []l = new int[10]; /*this array contains no negative elements but the test
method return true*/
l[0]=1;
l[1]=2;
l[2]=3;
l[3]=2;
System.out.println("" + test(l));
}
答案 0 :(得分:2)
执行此操作int []l = new int[10];
时,您最终得到的数组看起来像[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
。然后,您将覆盖前4个元素,但其余6个元素仍为0
。由于-0 == 0
评估为true
,因此您的代码认为存在对立面。
请参阅this question,了解Java如何根据数据类型初始化数组。