我应该编写一个从数组创建二维矩阵的方法,例如:({1, 2, 3, 4}, 3) 应该返回矩阵 {{1, 2, 3}, { 4}
public class Matrix {
public static int[][]toM(int[] array, int a) {
int[][]matrix = new int [(array.length + a- 1)/ a][a];
for (int i = 0; i < array.length; i++){
int value = array[i];
value = value++;
for (int row = 0; row < (array.length + a- 1)/a; row++) {
for (int col = 0; col < a; col++) {
matrix[row][col]= value++;
}
}
}
return matrix;
}
}
a 是每行中的元素数。如果我的输入是 int[] array = {1,2,3,4} 和 int n =3,我应该如何获得 [[1, 2, 3], [4]]?我得到 [[4, 5, 6], [7, 8, 9]]?
最佳答案
您的代码离基础有点远,不容易修复。对于初学者来说,三层嵌套循环是完全没有必要的;此外,您不会通过编写 value++
来获取数组元素(也许您对使用 *ptr++
遍历数组的 C 约定感到困惑)。从第一原则重新开始。
我假设这是家庭作业,所以我不会只为您编写。但这是基本大纲。结果元素的数量取决于输入数组而不是输出矩阵的维度,因此您的算法应该遍历输入元素。对于每个元素,其索引 i
的一些基本数学会告诉您它属于输出矩阵中的位置(row
和 col
)。将 array[i]
分配给 matrix[row][col]
。
对于奖励积分,请注意最后一行通常比其他行短。分配 matrix = new int [...][a]
将生成 [[1, 2, 3], [4, 0, 0]]
而不是声明的要求。通过仅分配数组的外部数组 — matrix = new int [...][]
并单独分配每个子数组来解决此问题,使用模数算法对最后一行进行特殊处理。
关于java - 从数组创建二维矩阵 (java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2706529/