我正在尝试搜索一对ArrayList的集合。我想要做的是,通过集合并找到一对中的第一个值并返回该对的第二个值。我遇到的问题是我必须找到第一个值的检查似乎不起作用,因此每次搜索时,我最终都返回null。我知道我的if语句存在问题,但我似乎无法弄清楚我做错了什么。由于这是一个家庭作业,我无法向我的对类或我的对列表类显示所有代码,但我可以向您展示我搜索第一个值的方法:
public S findFirst(F firstValue) {
Iterator<Pair> myIter = this.iterator();
S tmp2 = null;
while (myIter.hasNext()) {
Pair tmp1 = myIter.next();
if (tmp1.getFirst() == firstCall) {
tmp2 = (S) tmp1.getSecond();
}
}
return tmp2;
}
如果我输入一个else语句,只是在我的if检查中调用我试图做的事情,如下所示:
else{
tmp2 = (S) tmp1.getSecond();
}
然后每当我测试第一个值时,我得到第二个值,所以我知道我至少在正确的路径上,但我假设我在if语句中检查的内容有问题。有谁知道我怎么能正确地做到这一点,(并且请记住这是家庭作业,所以如何解决这个问题的指南对我来说远比一些随机答案更有价值,我想学习,而不仅仅是给出答案)提前致谢!
答案 0 :(得分:2)
不要使用==
来比较对象。覆盖并使用equals()
。
答案 1 :(得分:2)
我认为
if (tmp1.getFirst() == firstCall)
应该说
if (tmp1.getFirst().equals(firstValue))
重要的区别是==检查两个表达式是否引用完全相同的对象。你更想知道你的两个表达式是否实际引用了相同的对象。
答案 2 :(得分:1)
试试这个:
if (tmp1.getFirst().equals(firstValue))
而不是
if (tmp1.getFirst() == firstCall)
您也可以覆盖自己的等于方法。
永远不要使用==
来比较对象。
答案 3 :(得分:0)
Matt说,(不要使用==
)但我认为更大的问题是你没有返回'第一次'遭遇......你的if
陈述应该看起来像:
public S findFirst(F firstValue) {
Iterator<Pair> myIter = this.iterator();
while (myIter.hasNext()) {
Pair tmp1 = myIter.next();
if (firstValue.equals(tmp1.getFirst())) {
return (S) tmp1.getSecond();
}
}
return null;
}