2つの配列を比較するコードを書こうとしています。1つ目の配列には自分で数字を入れていますが,2つ目の配列は入力ファイルから数字を取っています.この配列のサイズは,ファイルの最初の数字によって決まりますが,最初の配列のサイズは常に10です。長さは、数字と同様に、両方の配列で同じでなければなりません。私のコードを以下に示します。
public static void compareArrays(int[] array1, int[] array2) {
boolean b = false;
for (int i = 0; i < array2.length; i++) {
for (int a = 0; a < array1.length; a++) {
if (array2[i] == array1[a]) {
b = true;
System.out.println("true");
} else {
b = false;
System.out.println("False");
break;
}
}
}
}
私が見たところ、あなたはただ、両者が同等であるかどうかを確認しようとしているようですが、もしこれが事実であれば、このようなもので行けばいいのです。
boolean areEqual = Arrays.equals(arr1, arr2);
これが標準的な方法です。
ところで、javaのドキュメントによると、配列はソートされていないと等しいとは言えないようです。
2つの配列は、両方の配列が同じ数の要素を含み、2つの配列の対応するすべての要素のペアが等しい場合、等しいとみなされます。言い換えれば、2つの配列が同じ要素を同じ順序で含む場合、2つの配列は等しい。
見落としていてすみません。
.equalsのような簡単なものがあるにもかかわらず、あなたのコードには2つの間違いがあることを指摘したいと思います。1つ目は、配列を見ていくときに、
bが
trueか
falseかを言っています。その後、forループがあるので、再度チェックを始めます。しかし、毎回、
bに値を与えています。つまり、何が起こっても、
bに設定される値は常に最後のfor-loopの値なのです。次回は、
boolean b = true、
if equal = true、何もしない、
if equal = false、
b=false`と設定します。
次に、array1
の各値とarray2
の各値をチェックすることになります。私の理解が正しければ、配列内の同じ場所にある値だけをチェックすればよいので、2つ目のforループを削除して、次のようにチェックすればよいことになります。if (array2[i] == array1[i])`.そうすれば、あなたのコードは同様に機能するはずです。
あなたのコードは次のようになります。
public static void compareArrays(int[] array1, int[] array2) {
boolean b = true;
for (int i = 0; i < array2.length; i++) {
if (array2[i] == array1[i]) {
System.out.println("true");
} else {
b = false;
System.out.println("False");
}
}
return b;
}
しかし、他の方がおっしゃるように、もっと簡単な方法があります。Arrays.equals(ary1,ary2)です。