Java 按升序排序二维数组

Java 按升序排序二维数组,java,arrays,sorting,multidimensional-array,Java,Arrays,Sorting,Multidimensional Array,我试图将这个2d数组按升序排序,从{4,2}、{1,7}、{4,5}、{1,2}、{1,1}、{4,1}到{1,1}、{1,2}、{1,7}、{4,1}、{4,2}、{4,5}。但出于某种原因,它仍然给我原始数组,并且没有排序。我错过了什么 公共类排序{ 公共静态void main(字符串[]args){ int[][]数组={{4,2},{1,7},{4,5},{1,2},{1,1},{4,1}; 排序(数组); 打印(阵列); } //行长 公共静态无效打印(int[]m){ 对于(int

我试图将这个2d数组按升序排序,从
{4,2}、{1,7}、{4,5}、{1,2}、{1,1}、{4,1}
{1,1}、{1,2}、{1,7}、{4,1}、{4,2}、{4,5}。但出于某种原因,它仍然给我原始数组,并且没有排序。我错过了什么

公共类排序{
公共静态void main(字符串[]args){
int[][]数组={{4,2},{1,7},{4,5},{1,2},{1,1},{4,1};
排序(数组);
打印(阵列);
}
//行长
公共静态无效打印(int[]m){
对于(int i=0;iA[j+1][0]){
内部温度=0;
温度=A[i][j];
A[i][j]=A[i+1][j+1];
A[i+1][j+1]=A[i][j];
系统输出打印(“+A[i][j]);
}
}
}
返回新数组;
}
}

这就是您想要的:

  • 您的if语句从未执行,因为您的逻辑在 做比较

  • 因此,temp从未在原始代码中设置过

  • 最重要的是,
    temp
    应该是
    int[]
    ,而不是
    int

  • 也不需要从排序方法返回
    int

  • 我还稍微调整了你的打印程序


导入静态java.lang.System.out;
公共课操场{
公共静态void main(字符串[]args){
int[][]数组={{4,2},{1,7},{4,5},{1,2},{1,1},{4,1};
排序(数组);
打印(阵列);
}
公共静态无效打印(int[]m){
对于(int i=0;i0){
输出。打印(“,”);
}
打印(“{”+m[i][0]+”,“+m[i][1]+”);
}
out.println();
}
公共静态无效排序(int A[][]){
布尔未排序=真;
while(未排序){
未排序=错误;
对于(int i=0;iA[i+1][0])
||((A[i][0]==A[i+1][0])
&&(A[i][1]>A[i+1][1])
)) {
int[]temp=新的int[2];
temp[0]=A[i][0];
temp[1]=A[i][1];
A[i][0]=A[i+1][0];
A[i][1]=A[i+1][1];
A[i+1]=温度;
未排序=正确;
}
}
}
}
}

您可以看到它正在运行。

这就是您想要的:

  • 您的if语句从未执行,因为您的逻辑在 做比较

  • 因此,temp从未在原始代码中设置过

  • 最重要的是,
    temp
    应该是
    int[]
    ,而不是
    int

  • 也不需要从排序方法返回
    int

  • 我还稍微调整了你的打印程序


导入静态java.lang.System.out;
公共课操场{
公共静态void main(字符串[]args){
int[][]数组={{4,2},{1,7},{4,5},{1,2},{1,1},{4,1};
排序(数组);
打印(阵列);
}
公共静态无效打印(int[]m){
对于(int i=0;i0){
输出。打印(“,”);
}
打印(“{”+m[i][0]+”,“+m[i][1]+”);
}
out.println();
}
公共静态无效排序(int A[][]){
布尔未排序=真;
while(未排序){
未排序=错误;
对于(int i=0;iA[i+1][0])
||((A[i][0]==A[i+1][0])
&&(A[i][1]>A[i+1][1])
)) {
int[]temp=新的int[2];
temp[0]=A[i][0];
temp[1]=A[i][1];
A[i][0]=A[i+1][0];
A[i][1]=A[i+1][1];
A[i+1]=温度;
未排序=正确;
}
}
}
}
}
您可以看到它正在运行。

您可以使用比较器链接,先按一列,然后按另一列:

int[]]array={{4,2},{1,7},{4,5},{1,2},{1,1},{4,1};
排序(数组、比较器)
.comparingit(arr->arr[0])
.然后比较(arr->arr[1]);
System.out.println(array.deepToString(array));
// [[1, 1], [1, 2], [1, 7], [4, 1], [4, 2], [4, 5]]

另请参见:

您可以使用比较器链接先按一列,然后按另一列:

int[]]array={{4,2},{1,7},{4,5},{1,2},{1,1},{4,1};
排序(数组、比较器)
.comparingit(arr->arr[0])
.然后比较(arr->arr[1]);
System.out.println(array.deepToString(array));
// [[1, 1], [1, 2], [1, 7], [4, 1], [4, 2], [4, 5]]

另见: