Java 如何将多维数字数组中的行分组?
我一直试图在不使用array.sort的情况下对多维数组进行排序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}
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从最低到最高排序?