[英]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.