2つの配列を比較するコードを作成しようとしています。最初の配列には自分の数字を入れましたが、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;
}
}
}
}
public static void compareArrays(int[] array1, int[] array2) {
boolean b = true;
if (array1 != null && array2 != null){
if (array1.length != array2.length)
b = false;
else
for (int i = 0; i < array2.length; i++) {
if (array2[i] != array1[i]) {
b = false;
}
}
}else{
b = false;
}
System.out.println(b);
}
私が見るものから、それらが等しいかどうかを確認しようとしますが、これが本当なら、次のようなものを選んでください:
boolean areEqual = Arrays.equals(arr1, arr2);
これが標準的な方法です。
Ops、それはJava docから、配列が等しいとみなされるためにソートされなければならないことを継ぎ合わせます:
「2つの配列に同じ数の要素が含まれ、2つの配列の対応する要素のペアがすべて等しい場合、2つの配列は等しいと見なされます。
見逃してすみません。
つかいますArrays.equals(ary1,ary2);
//ブール値を返します
[〜#〜] edit [〜#〜]Arrays.deepEquals(ary1,ary2)
を使用して2D配列も比較できます
Arrays.equls(ar1,ar2)
とArrays.deepEquals(ar1,ar2)
の比較については このリンク も確認してください
Java Arrays.equals()は2次元配列に対してfalseを返します
EDIT 2
これらのライブラリメソッドを使用したくない場合は、次のようにメソッドを簡単に実装できます。
public static boolean ArrayCompare(int[] a, int[] a2) {
if (a==a2) // checks for same array reference
return true;
if (a==null || a2==null) // checks for null arrays
return false;
int length = a.length;
if (a2.length != length) // arrays should be of equal length
return false;
for (int i=0; i<length; i++) // compare array values
if (a[i] != a2[i])
return false;
return true;
}
配列のサイズが同じであることがわかっている場合は、並べ替えて比較する方が高速であることが証明されています
Arrays.sort(array1)
Arrays.sort(array2)
return Arrays.equals(array1, array2)
配列内のデータの順序を変更したくない場合は、System.arraycopy
最初。
既存の回答はいずれもコンパレータの使用を伴わないため、バイナリツリーやソートには使用できません。だから私はこれをここに残すつもりです:
public static int compareIntArrays(int[] a, int[] b) {
if (a == null) {
return b == null ? 0 : -1;
}
if (b == null) {
return 1;
}
int cmp = a.length - b.length;
if (cmp != 0) {
return cmp;
}
for (int i = 0; i < a.length; i++) {
cmp = Integer.compare(a[i], b[i]);
if (cmp != 0) {
return cmp;
}
}
return 0;
}
_.equals
_のような簡単なものがありますが、コードで犯した2つの間違いを指摘したいと思います。 1つ目:配列を調べると、b
はtrue
またはfalse
であると言います。次に、forループのため、再度チェックを開始します。ただし、b
に値を指定するたびに。したがって、何が起こっても、b
に設定される値は常にLAST forループの値です。次回、_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);
配列の長さは同じで、番号は全体で同じでなければなりません(配列の最初の番号はsasmeなどでなければなりません)
このコメントに基づいて、あなたはすでにあなたのアルゴリズムを持っています:
両方の配列の長さが同じかどうかを確認します。
array1.length == array2.length
番号は同じ位置で同じでなければなりません:
array1 [x] == array2 [x]
これを知って、次のようなコードを作成できます(これはJavaコードではなく、アルゴリズムです):
function compareArrays(int[] array1, int[] array2) {
if (array1 == null) return false
if (array2 == null) return false
if array1.length != array2.length then return false
for i <- 0 to array1.length - 1
if array1[i] != array2[i] return false
return true
}
注:関数はboolean
ではなくvoid
を返してから、別の変数の戻り値を復元し、それを使用してメッセージ「true」または「false」を出力する必要があります。
public static void main(String[] args) {
int[] array1;
int[] array2;
//initialize the arrays...
//fill the arrays with items...
//call the compare function
boolean arrayEquality = compareArrays(array1, array2);
if (arrayEquality) {
System.out.println("arrays are equals");
} else {
System.out.println("arrays are not equals");
}
}
Apache Commons ArrayUtils#isEquals() メソッドで配列の等価性を確認できます。
ここで私のアプローチは、他の人に役立つかもしれません。
public static void compareArrays(int[] array1, int[] array2) {
if (array1.length != array2.length)
{
System.out.println("Not Equal");
}
else
{
int temp = 0;
for (int i = 0; i < array2.length; i++) { //Take any one of the array size
temp^ = array1[i] ^ array2[i]; //with help of xor operator to find two array are equal or not
}
if( temp == 0 )
{
System.out.println("Equal");
}
else{
System.out.println("Not Equal");
}
}
}