我想按第二行按升序对2x3数组进行排序。第一行的值必须相应地改变位置。
E.g。
1 3 5
4 2 6
应该成为
3 1 5
2 4 6
代码:
int[][] values = {{1, 5, 3},
{4, 6, 2}};
Arrays.sort(values, new Comparator<int[]>(){
public int compare(int[] o1, int[] o2) {
return (Integer.valueOf(o1[0]).compareTo(o2[0]));
}
});
System.out.println(Arrays.deepToString(values));
输出与输入相同。我认为错误来自compare
方法,但我不知道它是什么。它是什么?
答案 0 :(得分:0)
比较器逻辑存在问题,因为您只比较不同行的相同列的值,而不是同一行的不同列。
你应该做的事情是这样的:
public static void main (String[] args) throws Exception
{
int[][] values = {{1, 5, 3},
{4, 6, 2}};
for(int i = 0; i < 2; i++) {
for(int j = i + 1; j < 3; j++) {
if(values[1][i] > values[1][j]) {
swap(values,0,i,j);
swap(values,1,i,j);
}
}
}
}
private static void swap(int[][] values,int row,int x, int y) {
int temp = values[row][x];
values[row][x] = values[row][y];
values[row][y] = temp;
}
您必须适当更改比较器逻辑。
答案 1 :(得分:0)
拜托,试试这个,会有用,
public static void main(String[] args) {
int[][] values = {{1, 5, 3},
{4, 6, 2}};
for(int i = 0 ; i < values.length; i ++){
for(int j = 1 ; j < values[i].length ; j ++){
if(i != 0){
if(values[i][j-1] > values[i][j] ){
for(int k = j;k>0;k--){
if(values[i][k-1] > values[i][k] ){
int temp1 = values[i][k-1];
values[i][k-1] = values[i][k];
values[i][k] = temp1;
int temp2 = values[i-1][k-1];
values[i-1][k-1] = values[i-1][k];
values[i-1][k] = temp2;
}
}
}
}
}
}
System.out.println(Arrays.deepToString(values));
}
输出:
[
[3, 1, 5],
[2, 4, 6]
]