比较整数数组的麻烦[Java]

时间:2016-09-20 19:53:03

标签: java arrays integer

我需要比较两个Integer数组,以了解它们是否相反(由布尔结果确定),在大多数情况下它最终工作得很好,但每当我试图知道以下数组时与另一个相反,它最终给了我麻烦,我不明白为什么。

boolean result = true;

Integer [] a1 = {999,1000,null};

Integer [] a2 = {null,1000,999};

if (a1.length>0){                   
    for (int i=0;i<a1.length;i++){
           if (a1[i] != a2[a1.length-i-1]){
                 return result = false;
           }
    }
}else{
    result = true;
}

我注意到如果我稍微更改两个数组的值(例如,99而不是999,或100而不是1000),它就可以工作。

有人可以帮我一把吗?谢谢你的建议!

1 个答案:

答案 0 :(得分:0)

您应该使用Integer类的equals()方法来比较两个Integer对象:https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#equals(java.lang.Object)

当您这样做时,在比较null值时应该小心。 您还应该检查数组的大小是否相同,否则您可能会遇到索引问题。

此代码应该可以满足您的需求:

public class Kot {
  public static void main(String[] argv) {
    boolean result = true;

    Integer[] a1 = {999, 1000, null};

    Integer[] a2 = {null, 1000, 999};

    if (a1.length != a2.length) {
        result = false;
    } else if (a1.length > 0) {
        for (int i = 0; i < a1.length; i++) {
            if (a1[i] == null && a2[a1.length - i - 1] == null) {
                continue;
            }
            if (!a1[i].equals(a2[a1.length - i - 1])) {
                result = false;
            }
        }
    } else {
        result = true;
    }

    System.out.println(result);
  }
}