我有小问题,我被困在这里。不知道错误在哪里。 我有这样的事情:
for (int j = 0; j < lengthF; j++){
if(f[j].getSNumber()==number){
//DO SOMETHING
}else{
//DO SOMETHING2
}
}
所以如果我的数字等于对象f
中的数字,我需要做点什么。
仅当我将数字设置为f[lengthF].getSNumber()
(最后一个对象编号)时,这才是好的。
我检查了并且我正确加载了所有对象,我可以打印所有对象,但是当我比较时我无法让它工作(1 == 1,2 == 2 ......)..
我会尝试更好地解释它: 等
last number in object (last object) = 3
entered number = 1
1 != 1 <- getting this
entered number = 3
3 == 3 <- gettig good result....
答案 0 :(得分:2)
这可能是重复的,但您希望使用.equals
函数而不是==
。 ==
比较对象引用,而.equals
如果被正确覆盖,则应检查对象内容。
正如其他人所提到的,如果你的类型是非整数(double / float),那么==
是比较它们的坏方法。您应该使用abs(a-b) < 0.001
或类似的东西来比较不等式和浮点数。
答案 1 :(得分:0)
您的问题很难理解,但我猜您在找到号码时会尝试做某些事情,而在您找不到号码时会做其他事情。
在这种情况下,你的逻辑不正确。
成功找到正确的号码后,您应该退出for循环。
boolean found = false;
for (int j = 0; j < lengthF; j++){
if(f[j].getSNumber()==number){
//DO SOMETHING
found = true;
break;
}
}
if (!success) {
// DO SOMETHING IF NOT FOUND
}
答案 2 :(得分:0)
如果从getSNumber()
返回的类型是double
,则可能是由于该类型的不精确性:值可能存在微小差异,使得两个值“不相等”,即使它们可能似乎是一样的。
如果从方法返回的类型是包装器,如Integer
或Double
,则使用.equals()
应该可以解决问题。使用==
比较它们是否是相同的实例,它们不是。