Java 需要检查ArrayList中的最后一个数字是否在ArrayList的其他部分重复
标题描述了我正在尝试做的事情 代码没有任何错误,但它不会在正确的时间输出true/false。例如,对于输入 五, 1. 2. 3. 4. 5. 完成 输出将为false,这是不正确的,因为您可以看到5出现在ArrayList的末尾和另一个位置。所以,是的,我需要一些帮助去窃听,我感谢你的帮助Java 需要检查ArrayList中的最后一个数字是否在ArrayList的其他部分重复,java,for-loop,arraylist,java.util.scanner,Java,For Loop,Arraylist,Java.util.scanner,标题描述了我正在尝试做的事情 代码没有任何错误,但它不会在正确的时间输出true/false。例如,对于输入 五, 1. 2. 3. 4. 5. 完成 输出将为false,这是不正确的,因为您可以看到5出现在ArrayList的末尾和另一个位置。所以,是的,我需要一些帮助去窃听,我感谢你的帮助 import java.util.ArrayList; import java.util.Scanner; public class LastRunner { public static vo
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);
}
}
import java.util.ArrayList;
导入java.util.Scanner;
公开课最后一名选手{
公共静态void main(字符串[]args)
{
扫描仪s=新的扫描仪(System.in);
ArrayList=新建ArrayList();
System.out.println(“输入一些数字。完成后,键入\“完成”);
而(s.hasnetint())
{
添加(s.nextInt());
}
int size=list.size();
布尔lastChecker=false;
对于(int i=0;i
您的程序对您问题中的输入有效是合理的。(正如在一篇评论中所指出的,我实际上还没有尝试过,但我能理解为什么它会起作用。)
但是,您的程序中肯定有一个bug。我发现的问题是:
if (list.get(size-1) == list.get(i))
问题是list.get
将返回一个Integer
对象。但是,当您使用=
来比较两个Integer
对象时,实际上是在比较两个对象引用
使用=
比较两个整数
值只在部分时间有效。这将取决于这些值以及它们是如何创建的
写上一行的正确方法是:
if (list.get(size-1).equals(list.get(i)))
(注意:如果你成功地在列表中获得了一个null
,上面的可能会给你一个NPE。但是,我不建议你测试null
。列表中的null
将表明在构建列表的代码中有一个bug。因此最好让NPE发生……这样程序员就会得到一个bug。)报告,或者别的什么。)
有关为什么
Integer==Integer
不正确(以及为什么它有时工作)的更详细解释,请参阅dup链接:。根据您提供的输入,代码工作正常,它本身返回true。请再次检查