标题描述了我要做的事情。
该代码没有任何错误,但它没有在正确的时间输出true/false。例如,对于输入
51.2.3.4.5.完成
输出将为false,这是不正确的,因为您可以看到5出现在ArrayList的末尾和另一个位置。所以,是的,我需要一些帮助去窃听,我很感激你的帮助!
import java.util.ArrayList;
import java.util.Scanner;
public class LastRunner {
public static void main (String[] args)
{
Scanner s = new Scanner(System.in);
ArrayList<Integer> list = new ArrayList<>();
System.out.println("Enter some numbers. When done, type "done"");
while (s.hasNextInt())
{
list.add(s.nextInt());
}
int size = list.size();
boolean lastChecker = false;
for(int i = 0; i < size-1; i++)
{
if (list.get(size-1) == list.get(i))
{
lastChecker = true;
}
}
System.out.println(lastChecker);
}
}
您的程序适用于问题中的输入是合理的。(如评论中所述。我实际上还没有尝试过,但我可以理解为什么会工作。(
然而,你的程序中肯定有一个错误。我发现的问题就在这里:
if (list.get(size-1) == list.get(i))
问题是list.get
将返回一个Integer
对象。但是,当使用==
比较两个Integer
对象时,实际上是在比较两个对象引用。
使用==
比较两个Integer
值仅在某些时间起作用。这将取决于价值观以及它们是如何产生的。
写上面一行的正确方法是:
if (list.get(size-1).equals(list.get(i)))
(注意:如果你成功地在列表中获得了null
,上面可能会给你一个NPE。但是,我不建议测试null
。列表中的null
将表明构建列表的代码中存在错误。所以最好让NPE发生…这样程序员就会得到错误报告,或者其他什么。(
有关Integer == Integer
为什么不正确(以及为什么有时有效(的更详细解释,请参阅dup链接:如何在Java中正确比较两个整数?。