我试图让一个布尔方法返回true或false,其中两个arrayLists
彼此相等。 arraysLists
为array
和array1
。用户输入它们。现在这里是我认为可行的代码:
public boolean equals(){
//if both are equal return true, else false
boolean test = false;
for(int i = 0; i < array1.size() && !test; i++){
if(array1.get(i) == (array.get(i))){
test = true;
}
}
return test;
}
除非所有arrayLists
个数字与其他arrayLists
个数字匹配,否则返回false
。
答案 0 :(得分:1)
您不需要覆盖equals方法,因为已经为列表提供了完全符合您需要的方法。
如果您坚持自己编写,则代码中会出现一个简单的错误。 因为你将test初始化为false,所以“&amp;&amp;!test”会让你的循环在开始时就存在。
正确的版本是:
public boolean equals(){
if(array.size()!=array1.size) return false; // test for different length
for(int i = 0; i < array1.size(); i++){
if(!array1.get(i).equals(array.get(i))){
return false;
}
}
return true;
}
答案 1 :(得分:0)
double equals(==)很危险。你实际上是在代码中返回对象,所以你肯定应该使用equals()而不是
答案 2 :(得分:0)
认为你只是迭代一个数组。想想那里可能出现的问题。另请查看您的控制声明。
如果您仔细关注代码的流量,您很快就会意识到为什么是错误的。
答案 3 :(得分:0)
您需要将代码更改为:
public boolean equals(){
if (array1.size() != array.size()) return false;
for(int i = 0; i < array1.size(); i++){
if(!array1.get(i).equals(array.get(i))){
return false;
}
}
return true;
}
首先,你必须以test
为真开始,如果发现不相等的东西则返回false,因为这清楚地表明ArrayLists不相等。实际上你根本不需要test
变量,所以我把它拿出来了。如果您发现不相等的东西,请返回false。如果你没有找到不相等的东西,它将永远不会返回false并且最后会返回true。其次,您必须使用equals()
方法,因为ArrayLists使用Integer
类,而不是int
原语,因此==
将检查它们是否是同一个对象,而不是它们是相同的数字。最后,为了处理不同大小的数组,你应该比较它们的大小,如果它们的大小不同,则返回false,因为它们不可能是相同的。
答案 4 :(得分:0)
你应该'反转'你的方法。假设数组首先是相等的。然后应该检查每次迭代元素是否不同。如果元素不同,则设置“不等于”标志。在伪代码中
boolean different = false;
for (each element of array 1) {
if (element != element of array 2) different = true
break;
}