簡體   English   中英

JAVA中2D數組的排序問題

[英]Sorting issue with 2D array in JAVA

通過下面的代碼,我嘗試對二維數組進行排序

 int[][] d2 = {
           {4,5,1},
           {4,1,1},
           {1,7,1},
           {3,3,2},
           {1}
          };

        java.util.Arrays.sort(d2, new java.util.Comparator<int[]>() {
            public int compare(int[] a, int[] b) {
                return a[0] - b[0];
            }
        });

我在排序后顯示數組

for (int r=0; r<d2.length; r++) {
            for (int c=0; c<d2[r].length; c++) {
                System.out.print(" " + d2[r][c]);
            }
            System.out.println("");
}

我得到的結果是這樣的

 1 7 1
 1
 3 3 2
 4 5 1
 4 1 1

我希望結果兩個像這樣

 1
 1 7 1
 3 3 2
 4 5 1
 4 1 1

要像上面那樣對數組進行排序需要做什么?

我嘗試用{1,0,0}替換{1} ,但是即使對於{1,0,1}它仍然給出相同的結果。

compare方法中compare傳遞的數組的長度。如果a[]長度小於b[] ,則返回-1:-

    java.util.Arrays.sort(d2, new java.util.Comparator<int[]>() {
                public int compare(int[] a, int[] b) {
                    if (a.length != b.length) {
                        return a.length < b.length ? -1 : 1;
                    }
                    return a[0] - b[0];
                }
            });

如果您想通過檢查每個元素來進行排序,我認為您應該這樣做。.將您的compare方法更改為:-

public int compare(int[] a, int[] b) {

    if (a.length == b.length) {
        for (int i = 0; i < a.length; i++) {
            if (a[i] == b[i]) {

            } else {
                return a[i] - b[i];
            }
        }
        return 0;

    } else {
        return a.length < b.length ? -1 : 1;
    }                       
}

在您的Comperator您僅使用第一個字段比較2個數組。 您必須包括所有字段以進行比較,或者至少必須檢查數組的長度才能獲得所需的結果。

暫無
暫無

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

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