需要检查ArrayList中的最后一个数字是否在ArrayList的其他部分重复



标题描述了我要做的事情。

该代码没有任何错误,但它没有在正确的时间输出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中正确比较两个整数?。

相关内容

最新更新