Java 如何将多维数字数组中的行分组?

Java 如何将多维数字数组中的行分组?,java,Java,我一直试图在不使用array.sort的情况下对多维数组进行排序 int arg[][] = { {26, 39, 3, 13}, {22, 97, 17, 123}, {46, 19, 63, 123}, {1, 37, 90, 32}, {17, 37, 90, 32}}; 进入这个 int arg[][] = { {3, 13, 26, 39}, {17,22,97,123}

我一直试图在不使用array.sort的情况下对多维数组进行排序

int arg[][] = {
        {26, 39, 3, 13},
        {22, 97, 17, 123},
        {46, 19, 63, 123},
        {1, 37, 90, 32},
        {17, 37, 90, 32}};
进入这个

int arg[][] = {
        {3, 13, 26, 39}, 
        {17,22,97,123}, 
        {19, 46, 63, 123},
        {1, 32, 37, 90},
        {17, 32, 37, 90}}; 
它将行从最低编号排序到最高编号

使用冒泡排序,我调整了这段代码并完成了所有操作,但它只对前3行进行排序,并抛出一个越界错误

这是我的密码

for (int i = arg[0].length - 1; i >= 0; i--) {
        for (int j = 0; j < i ; j++) {
            for (int k = 0; k < i ; k++) {
                if (arg[k][j] > arg[k][j + 1]) {
                    int temp = arg[k][j];
                    arg[k][j] = arg[k][j + 1];
                    arg[k][j + 1] = temp;

                }
            }
        }
    }

    for (int i = 0; i < arg.length; i++) {
        for (int j = 0; j < arg[i].length; j++) {
            System.out.print(arg[i][j] + " ");
        }
        System.out.println();
    }
for(int i=arg[0]。长度-1;i>=0;i--){
对于(int j=0;jarg[k][j+1]){
int temp=arg[k][j];
arg[k][j]=arg[k][j+1];
arg[k][j+1]=温度;
}
}
}
}
for(int i=0;i

我做错了什么?

为什么在排序循环中使用停止条件。它不能像arg[i].length那样,如下所示

for (int i = arg[0].length - 1; i >= 0; i--) {
    for (int j = 0; j < arg [i].length; j++) {
        for (int k = 0; k < arg [i].length ; k++) {
            if (arg[i][j] > arg[i][k]) {
                int temp = arg[i][j];
                arg[i][j] = arg[i][k];
                arg[i][k] = temp;

            }
        }
    }
}

for (int i = 0; i < arg.length; i++) {
    for (int j = 0; j < arg[i].length; j++) {
        System.out.print(arg[i][j] + " ");
    }
    System.out.println();
}
for(int i=arg[0]。长度-1;i>=0;i--){
对于(int j=0;jarg[i][k]){
int temp=arg[i][j];
arg[i][j]=arg[i][k];
arg[i][k]=温度;
}
}
}
}
for(int i=0;i

否则,在第5个元素上i=4,但每个内部数组中只有4个元素,因此最大有效索引为3,这是冒泡排序的经典实现

private static void bubblesort(Integer[] array) {
    for (int i = 0; i < array.length; i++) {
        for(int j = 0; j < array.length - 1; j++) {
            if(array[j].compareTo(array[j+1]) > 0) {
                swap(j, j+1, array);
            }
        }
    }

}

private static void swap(Integer index1, Integer index2, Integer[] array) {
    if(index1 == index2)return;
    Integer temp = new Integer(array[index2]);
    array[index2] = array[index1];
    array[index1] = temp;

}
private静态void bubblesort(整数[]数组){
for(int i=0;i0){
交换(j,j+1,数组);
}
}
}
}
专用静态无效交换(整数index1、整数index2、整数[]数组){
如果(index1==index2)返回;
整数温度=新整数(数组[index2]);
数组[index2]=数组[index1];
数组[index1]=温度;
}

正如您所说,最后两行没有排序。我打印出您正在迭代的索引,这表明您无法到达最后两行。相反,您可以这样做

for (int i = arg[0].length - 1; i >= 0; i--) {
    for (int j = 0; j < arg.length; j++) {
        for (int k = 0; k < arg[j].length - 1; k++) {

            if (arg[j][k] > arg[j][k + 1]) {
                int temp = arg[j][k];
                arg[j][k] = arg[j][k + 1];
                arg[j][k + 1] = temp;

            }
        }

    }
}
for(int i=arg[0]。长度-1;i>=0;i--){
对于(int j=0;jarg[j][k+1]){
int temp=arg[j][k];
arg[j][k]=arg[j][k+1];
arg[j][k+1]=温度;
}
}
}
}

错误消息是什么?当我删除第一行中的-1时,它会抛出这个“线程中的异常”java.lang.ArrayIndexOutOfBoundsException:4 at eJompo.eJompo.main(eJompo.java:43)java结果:1。当我不删除-1时,它可以正常工作,但只适用于前3行。@geil请编辑您的问题,添加有关异常消息的注释,以及插入或删除
-1
对异常消息的影响。这将使你的问题更完整、更容易阅读。除了对所有行进行排序外,如何将列0从最低到最高排序?