我正在尝试交换矩阵中的偶数行和奇数行索引,以便所有偶数行都在顶部,而所有奇数行都在底部。我事先创建了矩阵。
这是我的行交换代码:
int numberOfEvenRowIndices = 0;
if(matrix.length%2.0 == 0){
numberOfEvenRowIndices = matrix.length/2 - 1;
}
else{
numberOfEvenRowIndices = (int) (matrix.length/2.0 - 0.5);
}
for(int m = 0; m < numberOfEvenRowIndices; m++){
for (int k = 2; k < rows; k++){
if((matrix[k][0]/10)%2 == 0.0){
int firstEvenRow = k;
for (int i = 0; i < matrix[firstEvenRow].length; i++){
//store value of first even row index
int temp = matrix[firstEvenRow][i];
//swap value of first even row with first odd row
matrix[firstEvenRow][i] = matrix[k-1][i];
matrix[k-1][i] = temp;}
}
}
for( int i = 0 ; i < rows ; i++){
for( int j = 0 ; j < columns ; j++){
System.out.printf("%4s", matrix[i][j]);
}
System.out.println();
}
}
它输出:
0 1 2 3 4 5 6 7
40 41 42 43 44 45 46 47
20 21 22 23 24 25 26 27
60 61 62 63 64 65 66 67
10 11 12 13 14 15 16 17
30 31 32 33 34 35 36 37
50 51 52 53 54 55 56 57
70 71 72 73 74 75 76 77
我需要按顺序排列行(上下:0、20、40、60、10、30、50、70)
任何帮助表示赞赏。
最佳答案
这是使用List
的一种解决方案
ArrayList<Integer[]> result = new ArrayList<Integer[]>();
ArrayList<Integer[]> odd = new ArrayList<Integer[]>();
for (int i = 0, s = matrix.length; i < s; i++) {
if (i % 2 == 2) {
result.add(matrix[i]);
} else {
odd.add(matrix[i]);
}
}
result.addAll(odd);
Integer[][] resultMatrix = result.toArray(new Integer[result.size()][]);
最后,您将“排序”矩阵作为2d数组。