java - 将二维整数数组的行从小到大排序

标签 java arrays sorting multidimensional-array

我有一个名为 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/

相关文章:

java - 启动我的 java.exe 在哪里?

java - 可排序的类表 Java 类

java - 如何使用 weblogic.deployer 部署 jar 文件?

arrays - 寻找最大平衡子数组的空间高效算法?

c - 数组作为函数参数

java - PreparedStatement 类型中的方法 setArray(int, Array) 不适用于参数 (String, String[])

JAVA:在多列上对 ArrayList<ArrayList<Integer>> 进行排序

python - 将字符串转换为位数组

java - 如何获取当前显示的图像位置?

Java SSH MySQL 连接