簡體   English   中英

使 java 檢查數組相等

[英]Make java check array equal

我對編寫代碼還很陌生,我得到了一個 Java 任務來編寫一個具有兩個相同大小的 arrays 的程序,並且用戶正在向其中輸入值。 然后程序運行並檢查 arrays 是否具有相同的值。 例如:array1 {1,2,3,4,5} 和 array2 {3,2,5,4,1} 被認為是相等的。 但是如果第二個數組有不同的數字(array2 {3,2,6,4,1}),則認為它們不相等。 當兩個 arrays 相等但值不在同一個索引中時,應將第二個數組更改為右側的索引。

希望我明白,無論如何我都寫了代碼,但我真的很困惑。

import java.util.Scanner;

public class Exe_3_sameOrNot {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        final int ARR_SIZE = 5;
        int num1, num2;
        int i, j, k;

        int[] firstArr = new int[ARR_SIZE];
        int[] secArr = new int[ARR_SIZE];

        for (i = 0; i < firstArr.length; i++) {
            System.out.print("Enter first 5 numbers ");
            firstArr[i] = input.nextInt();
        }
        for (i = 0; i < secArr.length; i++) {
            System.out.print("Enter sec 5 numbers ");
            secArr[i] = input.nextInt();
        }
        int len = firstArr.length;
        for (j = 0; j < len; j++) {
            if (firstArr[j] == secArr[j]) {
                System.out.print(firstArr[j] + "\n" + secArr[j]);
            } else {
                for (k = 0; k < len; k++) {
                    if (k == len) {
                        k = k * 0;

                    }
                    secArr[k] = secArr[k + 1];
                }
                System.out.print(secArr[k]);
            }
        }

        input.close();
    }
}

如果 arrays 的長度相等,則“天真的”實現將使用嵌套循環將array1中的每個元素與array2的每個元素進行比較:

static boolean arraysEqual(int[] a1, int[] a2) {
    
    if (a1.length != a2.length) { // different lengths, could not be "equal"
        return false;
    }
    for (int i = 0, n = a1.length; i < n; i++) {
        boolean found = false;
        for (int j = 0; j < n && !found; j++) {
            if (a1[i] == a2[j]) {
                found = true;
            }
        }
        if (!found) { // missing element detected
            return false;
        }
    }
    return true;
}

但是,當輸入數組中沒有重復項時,此解決方案效果很好。 也就是說,對於下面的輸入,結果將是true

int[] a3 = {4, 3, 2, 2, 2};
int[] a4 = {3, 3, 2, 4, 2};

如果需要確保兩個 arrays 包含相同數量的不同元素,最好對輸入 arrays 進行排序並檢查所有排序后的元素是否相等:

static boolean arraysEqual2(int[] a1, int[] a2) {
    
    if (a1.length != a2.length) {
        return false;
    }
    Arrays.sort(a1);
    Arrays.sort(a2);
    
    for (int i = 0; i < a1.length; i++) {
        if (a1[i] != a2[i]) {
            return false;
        }
    }
    return true;
}

測試:

public static void main(String args[]) {
    int[] a1 = {1, 2, 3, 4, 5};
    int[] a2 = {4, 3, 2, 1, 5};
    int[] a3 = {4, 3, 2, 2, 2};
    int[] a4 = {3, 2, 3, 4, 2};
    int[] a5 = {3, 2, 4, 3, 2};
    
    System.out.println(Arrays.toString(a1) + " EQ " + Arrays.toString(a2) + "? nested: " + arraysEqual(a1, a2) + "; sorted: " + arraysEqual2(a1, a2));
    System.out.println(Arrays.toString(a1) + " EQ " + Arrays.toString(a3) + "? nested: " + arraysEqual(a1, a3) + "; sorted: " + arraysEqual2(a1, a3));
    System.out.println(Arrays.toString(a2) + " EQ " + Arrays.toString(a3) + "? nested: " + arraysEqual(a2, a3) + "; sorted: " + arraysEqual2(a2, a3));
    System.out.println(Arrays.toString(a2) + " EQ " + Arrays.toString(a4) + "? nested: " + arraysEqual(a2, a4) + "; sorted: " + arraysEqual2(a2, a4));
    System.out.println(Arrays.toString(a3) + " EQ " + Arrays.toString(a4) + "? nested: " + arraysEqual(a3, a4) + "; sorted: " + arraysEqual2(a3, a4));
    System.out.println(Arrays.toString(a5) + " EQ " + Arrays.toString(a4) + "? nested: " + arraysEqual(a5, a4) + "; sorted: " + arraysEqual2(a5, a4));
}

Output:

[1, 2, 3, 4, 5] EQ [4, 3, 2, 1, 5]? nested: true; sorted: true
[1, 2, 3, 4, 5] EQ [4, 3, 2, 2, 2]? nested: false; sorted: false
[1, 2, 3, 4, 5] EQ [2, 2, 2, 3, 4]? nested: false; sorted: false
[1, 2, 3, 4, 5] EQ [3, 2, 3, 4, 2]? nested: false; sorted: false
[2, 2, 2, 3, 4] EQ [2, 2, 3, 3, 4]? nested: true; sorted: false
[3, 2, 4, 3, 2] EQ [2, 2, 3, 3, 4]? nested: true; sorted: true

lambda 短而甜

b1 和 b2 是 arrays a1 和 a2 排序:

int[] b1 = Arrays.stream( a1 ).sorted().toArray();
int[] b2 = Arrays.stream( a2 ).sorted().toArray();


檢查兩個 arrays 的長度是否相同,並且兩個 arrays 上對應位置的所有數字是否相等:

System.out.println( "is equal: "
    + ((b1.length == b2.length) && IntStream.range( 0, b1.length )
      .allMatch( i -> b1[i] == b2[i] ) ));

而已

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM