【问题标题】:Can`t compare ArrayList values in Java无法比较 Java 中的 ArrayList 值
【发布时间】:2021-02-13 03:20:44
【问题描述】:

我正在学习 Java 课程,在一个练习中我必须创建三个 ArrayList,要求用户用整数填充前两个,然后比较两个 ArrayList。

不重复的值被添加到第三个 ArrayList。我已经声明了 ArrayLists,使用 Scanner 来允许用户填充 ArrayLists,这部分工作正常。

当我尝试比较两个 ArrayList 时,问题就来了。我在这一行中收到各种警报(“if 语句是多余的”、“使用 == 或 !=" 比较整数值、翻转二元运算符的操作数”、“反转 if” )。

我怀疑我在 if 语句之后写的东西不是很干净,我可以得到一些关于它的 cmets(我不是 Java 专家),但我不明白 IDE 显示的警报。代码编译并运行得很好,直到遇到嵌套循环。请帮忙!谢谢。

       //Checking for values that dont repeat
        for(int i=0;i<listVector1.size();i++){
            for(int j=0;j<listVector2.size();i++){
                if(listVector1.get(i)==listVector2.get(j)){//Im getting an alert here
                 repeats=true; //this boolean was previously declared
                 } else {
                  repeats=false;
                }
            if(repeats==false){
                int newValue=listVector1.get(i);
                listVector3.add(newValue);
            }
        }

        }

【问题讨论】:

  • 如何初始化ArrayList?属于哪一种?
  • 在第二个 for 循环中,您使用的是 i++ 而不是 j++。

标签: java for-loop if-statement arraylist compare


【解决方案1】:

首先,你在第二个 for 循环中有一个错误。我希望你想要增加 j。 其次是比较你必须从数组中显式转换你的值或使用函数equals。 第三,你的 if 语句必须在你的第二个循环之外。因为我希望您只想在第三个数组中添加一次您找到的数字。

for(int i = 0; i < listVector1.size(); i++) {
    for(int j = 0; j < listVector2.size(); j++) {
        if (listVector1.get(i).equals(listVector2.get(j))) {
            repeats = true;
            break;
        } else {
            repeats = false;
        }
     }
     if(!repeats){
         int newValue=listVector1.get(i);
         listVector3.add(newValue);
     }
 }

【讨论】:

  • 对于您指出的第一个错误,我觉得自己像个笨蛋。对于使用“==”而不是equals方法,这实际上是我教授的错误。我对使用“break”表示怀疑,因为它嵌套在 if 代码块中,可能导致意外行为,但我会尝试你的建议。非常感谢您抽出宝贵的时间。
【解决方案2】:

这是真正的问题。

使用 == 或 != 比较整数值

== 运算符比较两个对象的引用。但是您真正想要做的是比较存储在引用中的值。 因此,您需要使用equals 运算符。

或者您可以将其中一个值显式转换为 int 并在这些值上使用 ==

if(listVector1.get(i) == ((int)listVector2.get(j))){
     repeats=true; 
} else {
     repeats=false;
}

如需了解更多信息,请在 Google 上搜索 difference between == and equals operator

【讨论】:

  • 非常感谢您抽出宝贵时间发布此内容。我不知道 ArrayLists 的 equals 方法,实际上该课程的教授是建议以这种方式使用“==”的人。我会尝试你的建议。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 2014-01-01
相关资源
最近更新 更多