java - 从数组创建二维矩阵 (java)

标签 java arrays matrix 2d

我应该编写一个从数组创建二维矩阵的方法,例如:({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 的一些基本数学会告诉您它属于输出矩阵中的位置(rowcol)。将 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/

相关文章:

javascript - 数组和 javascript - 如何比较两个数组

javascript - 获取具有子数组 json 值的数组的值

python - Python 中的对角线网格遍历

C - 从文件中读取未知大小的矩阵

java - Geb NoClassDefFoundError : geb/error/UnableToLoadException

java - 使用 g.drawString() 遍历数组

java - Jenkins 不过滤 Maven 构建的全局密码

arrays - 根据空行或任何未使用的字符将文本文件拆分为数组

Python:添加包含列元素成对乘积的列的最快方法

Java 多线程服务器未按预期工作