我遇到的问题是我必须创建一个程序,它使用一个对象来反转2D数组中每行的元素并打印出结果矩阵。我的代码只反向打印出每行的前3个数字。这是我的代码:
class Reverse {
void matrixReverse(int[][] data) {
int row_val = data.length;
int col_val = data[0].length;
int[][] data_reverse = new int[row_val][col_val];
for(int row = row_val - 1; row >= 0; row--){
for(int col = col_val - 1; col >= 0; col--){
data_reverse[row_val - 1 - row][col_val - 1 - col] = data[row][col];
}
}
for(int row = 0; row < row_val; row++){
for(int col = 0; col < col_val; col++){
System.out.println(data_reverse[row][col]);
}
System.out.println();
}
}
}
public class ArrayReverse {
public static void main(String[] args) {
int[][] data = {
{3, 2, 5},
{1, 4, 4, 8, 13},
{9, 1, 0, 2},
{0, 2, 6, 3, -1, -8}
}; // Creates the array
Reverse reverse = new Reverse();
reverse.matrixReverse(data);
}
}
输出结果为:
6
2
0
0
1
9
4
4
1
5
2
3
正如您所看到的,它只打印行的前3个数字,但我需要它来打印所有行。
答案 0 :(得分:2)
您的列是可变宽度的,但您从第一行获得宽度(可能甚至不存在!)。在访问数组之前,您需要检查数组的大小。您还可以切换数组大小参数,首先从行开始。
要解决您的特定问题,您需要为行循环内的每一行设置col_val。
void matrixReverse(int[][] data) {
int rowWidth = data.length;
int[][] reversedData = new int[rowWidth][];
for (int row = rowWidth - 1; row >= 0; row--) {
int colWidth = data[row].length;
int reverseRow = rowWidth - 1 - row;
reversedData[reverseRow] = new int[colWidth];
for (int col = colWidth - 1; col >= 0; col--) {
int reverseCol = colWidth - 1 - col;
reversedData[reverseRow][reverseCol] = data[row][col];
}
}
for (int row = 0; row < rowWidth; row++) {
int colWidth = reversedData[row].length;
for (int col = 0; col < colWidth; col++) {
System.out.println(reversedData[row][col]);
}
System.out.println();
}
}
P.S。 row_val和col_val是错误的名称。它们的宽度不是值,Java中的命名约定是colWidth,rowWidth不是col_width或row_width。