我有一个名为 arry 的二维整数数组,如下所示:
[6, 2, 7]
[3, 6, 7]
[5, 6, 1]
[5, 3, 4]
[5, 3, 8]
我想按照结果对其进行排序(为此,我创建了相同大小的新数组,名为 table):
[3, 6, 7]
[5, 6, 1]
[5, 3, 4]
[5, 3, 8]
[6, 2, 7]
我有这个代码:
for (int k = 0; k < numOfArrays; k++) {
int smallest = 2147483647;
int indexSmallest = 0;
for (int h = 0; h < numOfArrays; h++) {
if (arry[h][0] < smallest) {
smallest = arry[h][0];
indexSmallest = h;
}
}
tabel[k] = arry[indexSmallest];
arry[indexSmallest][0] = 2147483647;
}
for (int k = 0; k < numOfArrays; k++) {
System.out.println(Arrays.toString(tabel[k]));
}
结果是:
[2147483647, 6, 7]
[2147483647, 6, 1]
[2147483647, 3, 4]
[2147483647, 3, 8]
[2147483647, 2, 7]
如果我从未将表的任何值设置为 2147483647
,我不明白表如何包含 2147483647
?
最佳答案
真正的问题是这一行:
tabel[k] = arry[indexSmallest];
记住,数组是对象。此行不会复制内部数组,而是设置对其的引用。
所以此时 tabel[k]
和 arry[indexSmallest]
都指向同一个数组对象。所以当你这样做时:
arry[indexSmallest][0] = 2147483647;
您可以为 arry[indexSmallest]
和 tabel[k]
更改它(因为它们指向同一个对象)
要解决此问题,请将数组的副本分配给tabel[k]
:
tabel[k] = Arrays.copyOf(arry[indexSmallest], 3);
关于java - 将二维整数数组的行从小到大排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28239084/