İki diziyi karşılaştırmak için kod yazmaya çalışıyorum. İlk diziye kendi rakamlarımı koydum, ancak ikinci dizi giriş dosyasından sayıları alıyor. İlk dizinin boyutu her zaman 10 iken, bu dizinin boyutu dosyadaki ilk sayı tarafından belirlenir. Uzunluk, sayıların yanı sıra her iki dizi için de aynı olmalıdır. Benim kodum aşağıdadır:
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;
}
}
}
}
Gördüğüm kadarıyla sadece eşit olup olmadıklarını görmeye çalışıyorsunuz, eğer bu doğruysa, sadece böyle bir şeyle gidin:
boolean areEqual = Arrays.equals(arr1, arr2);
Bu, bunu yapmanın standart yoludur.
Ops, java dokümanından dizilerin eşit olarak kabul edilmesi için sıralanması gerektiği anlaşılıyor:
"Her iki dizi de aynı sayıda eleman içeriyorsa ve iki dizideki karşılık gelen tüm eleman çiftleri eşitse, iki dizinin eşit olduğu kabul edilir. Başka bir deyişle, iki dizi aynı sırayla aynı öğeleri içeriyorsa eşittir"
Bunu kaçırdığım için özür dilerim.
Dizilerin aynı boyutta olduğunu biliyorsanız, sıralayıp karşılaştırmak kanıtlanabilir şekilde daha hızlıdır
Arrays.sort(array1)
Arrays.sort(array2)
return Arrays.equals(array1, array2)
Dizilerdeki verilerin sırasını değiştirmek istemiyorsanız, önce bir System.arraycopy
yapın.
.equalsgibi kolay bir şey olmasına rağmen, kodunuzda yaptığınız İKİ hataya dikkat çekmek istiyorum. Birincisi: dizilerin içinden geçerken
bnin
trueya da
falseolduğunu söylüyorsunuz. Sonra for döngüsü nedeniyle kontrol etmek için tekrar başlıyorsunuz. Ancak her seferinde
bye bir değer veriyorsunuz. Yani, ne olursa olsun,
bnin ayarlandığı değer her zaman SON for döngüsünün değeridir. Bir dahaki sefere,
boolean b = true,
if equal = true, hiçbir şey yapma,
if equal = false,
b=false` olarak ayarlayın.
İkinci olarak, şimdi dizi1
deki her değeri dizi2
deki her değerle kontrol ediyorsunuz. Doğru anladıysam, yalnızca dizide aynı konumdaki değerleri kontrol etmeniz gerekir, yani ikinci for döngüsünü silmeniz ve şu şekilde kontrol etmeniz gerekir: if (dizi2[i] == dizi1[i])
. O zaman kodunuz da çalışmalıdır.
Kodunuz şu şekilde çalışacaktır:
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;
}
Ancak diğerlerinin söylediği gibi, daha kolay olurdu: Arrays.equals(ary1,ary2);