Membandingkan dua larik bilangan bulat di java

Saya mencoba menulis kode untuk membandingkan dua larik. Pada larik pertama saya telah menaruh angka-angka saya sendiri, tetapi larik kedua mengambil angka-angka dari file input. Ukuran array ini ditentukan oleh angka pertama dalam file sementara array pertama selalu berukuran 10. Panjangnya harus sama untuk kedua larik dan juga angkanya. Kode saya ada di bawah ini:

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;
            }
        }
    }       
}

Dari apa yang saya lihat Anda hanya mencoba melihat apakah mereka sama, jika ini benar, lakukan saja dengan sesuatu seperti ini:

boolean areEqual = Arrays.equals(arr1, arr2);

Ini adalah cara standar untuk melakukannya.

Ops, tampaknya larik-larik itu juga harus diurutkan agar dianggap sama, dari dokumen java:

"Dua larik dianggap sama jika kedua larik berisi jumlah elemen yang sama, dan semua pasangan elemen yang sesuai dalam dua larik sama. Dengan kata lain, dua larik sama jika mengandung elemen yang sama dalam urutan yang sama &"

Maaf karena melewatkan itu.

Komentar (3)

Jika Anda tahu bahwa larik-larik tersebut memiliki ukuran yang sama, terbukti lebih cepat untuk mengurutkan lalu membandingkannya

Arrays.sort(array1)
Arrays.sort(array2)
return Arrays.equals(array1, array2)

Jika Anda tidak ingin mengubah urutan data dalam array maka lakukan System.arraycopy terlebih dahulu.

Komentar (2)

Meskipun ada sesuatu yang mudah seperti .equals, saya ingin menunjukkan DUA kesalahan yang Anda buat dalam kode Anda. Yang pertama: ketika anda memeriksa array, anda mengatakan b adalah true atau false. Kemudian anda mulai lagi untuk memeriksa, karena adanya for-loop. Tetapi setiap kali Anda memberikan nilai b. Jadi, tidak peduli apa yang terjadi, nilai b yang akan disetel selalu merupakan nilai dari for-loop TERAKHIR. Lain kali, set boolean b = true, jika sama dengan = true, tidak melakukan apa-apa, jika sama dengan = false, b=false.

Kedua, anda sekarang memeriksa setiap nilai di array1 dengan setiap nilai di array2. Jika saya mengerti dengan benar, Anda hanya perlu memeriksa nilai di lokasi yang sama dalam larik, yang berarti Anda seharusnya menghapus for-loop kedua dan memeriksa seperti ini: if (array2[i] == array1[i]). Maka kode Anda seharusnya berfungsi juga.

Kode Anda akan bekerja seperti ini:

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;

}

Tetapi seperti yang dikatakan oleh yang lain, lebih mudah adalah: Array.equals(ary1,ary2);

Komentar (5)