2016-09-20 12 views
0

2つの整数配列を比較して、それらが互いに逆であるかどうかを知る必要があります(ブール結果によって決定されます)。ほとんどの場合、次の配列が他のものと逆のものであるかどうかを知ろうとすると、それは私にトラブルを与えてしまいます。整数配列を比較する際のトラブル[Java]

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、又はその代わりに1000の100)は、それが動作することに気づきました。

誰かが私に手を差し伸べることはできますか?アドバイスありがとう!

+1

使用 'のequals()' ..またはプリミティブ配列型 – sidgate

+2

http://stackoverflow.com/questions/3130311/weird-integer-boxing -in-java – sidgate

+2

'それは私に悩みを与えてしまいます。何を意味するのでしょうか? – njzk2

答えて

0

次の2つのIntegerオブジェクトを比較するために、Integerクラスのequals()メソッドを使用する必要があります。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); 
    } 
}