我正在尝试完成一项任务,要求我在Java中创建一个方法,当给定所需的高度和宽度时,创建一个行或列主矩阵。
以下是我到目前为止的情况:
public static int[][] increasingMatrix(int width, int height, boolean format){
if (format) { // generate row-major matrix
int[][] array = new int[height][];
int count = 0;
for (int i = 0; i < height; i++) {
array[i] = new int[width];
for (int j = 0; j < width; j++) {
array[i][j] = count;
count++;
}
}
return array;
} else {
int[][] array = new int[width][];
int count = 0;
for (int i = 0; i < width; i++) {
array[i] = new int [height];
for (int j = 0; j < height; j++) {
array[j][i] = count;
count ++;
}
}
return array;
}
}
然而,当我去尝试对生成的数组运行测试时,列主要矩阵(据我所知)正在生成错误。行主矩阵似乎正确生成。
你能看到我做错的事吗?我已经盯着这几个小时,但似乎无法获得任何突破。
谢谢!
答案 0 :(得分:1)
你的代码错了。矩阵中的第一个索引始终是宽度。
请记住:矩阵是一个数组数组。第一个索引是矩阵的宽度,第二个是高度。
试试这个:
if(format) {
return buildRowMajorMatrix(width, height);
} else {
return buildColumnMajorMatrix(width, height);
}
buildRowMajorMatrix
的样子:
private int[][] buildRowMajorMatrix(int width, int height) {
int[][] matrix = new int[width][height];
int cellValue = 0;
for(int columnIndex = 0 ; columnIndex < width ; columnIndex++) {
for(int rowIndex = 0 ; rowIndex < height ; rowIndex++, cellValue++) {
matrix[columnIndex][rowIndex] = cellValue;
}
}
return matrix;
}
buildColumnMajorMatrix
看起来像:
private int[][] buildColumnMajorMatrix(int width, int height) {
int[][] matrix = new int[width][height];
int cellValue = 0;
for(int rowIndex = 0 ; rowIndex < height ; rowIndex++) {
for(int columnIndex = 0 ; columnIndex < width ; columnIndex++, cellValue++) {
matrix[columnIndex][rowIndex] = cellValue;
}
}
return matrix;
}
答案 1 :(得分:0)
在其他情况下:
else {
int[][] array = new int[width][];
int count = 0;
for (int i = 0; i < width; i++) {
array[i] = new int [height];
for (int j = 0; j < height; j++) {
array[j][i] = count;
count ++;
}
}
return array;
}
您正在尝试迭代尚未初始化的数组(矩阵行,j-index)。要实现列主矩阵,您需要首先初始化所有行(或切换到更复杂的算法)。
另外我认为两种格式的矩阵的宽度和高度应该相同。行和列多数只表示我们是否按列或行填充矩阵迭代,但我猜这个任务的措辞留有了解释空间。
我的解决方案:
public static int[][] increasingMatrix(int width, int height, boolean format){
int[][] array = new int[height][width]; // Java's shortcut generating regular array of arrays for you
int count = 0;
if (format) { // generate row-major matrix
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
array[i][j] = count;
count++;
}
}
} else {
for (int j = 0; j < width; j++)) {
for (int i = 0; i < height; i++ {
array[i][j] = count;
count++;
}
}
}
return array;
}