【问题标题】:Need to check if the last number in an ArrayList is repeated in the other part of the ArrayList [duplicate]需要检查 ArrayList 中的最后一个数字是否在 ArrayList 的其他部分重复 [重复]
【发布时间】:2021-06-13 10:53:36
【问题描述】:

标题描述了我正在尝试做的事情。

代码没有任何错误,但它没有在正确的时间输出真/假。例如,对于输入

5 1 2 3 4 5 完成

输出将是错误的,这是不正确的,因为您可以看到 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);
    }
}

【问题讨论】:

  • 根据您给出的输入,代码工作正常,它本身返回 true。再次检查

标签: java for-loop arraylist java.util.scanner


【解决方案1】:

您的程序可能适用于您问题中的输入。 (正如评论中所指出的。我还没有真正尝试过,但我知道为什么它起作用。)

但是,您的程序中肯定存在错误。我发现的问题在这里:

     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 链接:How to properly compare two Integers in Java?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 2015-12-10
    • 1970-01-01
    • 2018-03-26
    相关资源
    最近更新 更多