我正在尝试在矩阵中交换偶数和奇数行索引,以便所有偶数行都在顶部,所有奇数行都在底部。我事先创建了矩阵。
这是我的行交换代码:
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) 任何帮助表示赞赏。
答案 0 :(得分:1)
以下是使用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数组。
答案 1 :(得分:0)
我不会选择一个聪明的算法,但选择可读的东西:
void evenodd(int[][] matrix) {
// New rows:
int[] rows = new int[matrix.length];
int rowI = 0;
// Even rows:
for (int i = 0; i < matrix.length; i += 2) {
rows[rowI] = matrix[i];
++rowI;
}
// Odd rows:
for (int i = 1; i < matrix.length; i += 2) {
rows[rowI] = matrix[i];
++rowI;
}
System.arraycopy(rows, 0, matrix, 0, matrix.length);
}
也不要使用双打,但在需要时使用整数除法:
int evenRows = (matrix.length + 1) / 2;
int oddRows = matrix.length / 2;
当然要交换整行。
类Arrays也有copyOf方法,这可能会派上用场。