我可以使用单个数组创建多维数组吗?

时间:2018-11-09 15:59:16

标签: java arrays multidimensional-array

说我有两个随机生成的数组(行和列),我希望将它们用于填充多维数组。如果数组是行和列,则多维数组将是matrix [rows] [columns]。只是我如何生成行的一个示例:

int[] rows = new int[20];         
for(int i = 0; i < rows.length; i++) {
rows[i] = (int)(Math.random()*1000 + 1);
    }
System.out.println("Rows Generated: " + Arrays.toString(randomArrayN));
  }
}

columns数组也是以此方式构建的。有没有简单的方法来创建二维数组并使用这些数组填充它们? 我知道这种语法是错误的,但基本上我想知道是否有办法做到这一点:

int matrix[][] = new int[rows][columns];

3 个答案:

答案 0 :(得分:0)

是的,您肯定可以,尽管可能会更加混乱。

您可以使用以下方法初始化3d数组:

// test is a 3d array
int[][][] test = {
          {
           {1, -2, 3}, 
           {2, 3, 4}
          }, 
          { 
           {-4, -5, 6, 9}, 
           {1}, 
           {2, 3}
          } 
};

我喜欢用矩形或3d异形来思考,就像矩形棱镜。棱镜上的每一行(高度)都包含2个东西的长度和宽度,或者x,y。在其他世界中,您拥有一个二维数组,一个值是列,另一个值是行,在一个数组中将其变成3d。

enter image description here

现在如果要打印3d数组的值怎么办? 只需这样做:

 for (int[][] array2D: test) {
    for (int[] array1D: array2D) {
       for(int item: array1D) {
          System.out.println(item);
       }
    }
 }

答案 1 :(得分:0)

尽管从行和列的角度考虑二维数组很方便,但是二维数组只是数组的数组。

例如,

    int[] values1 = {1, 2 ,3};
    int[][] matrix1 = {values1, values1, values1};

    matrix1[1][1] = 42;
    System.out.println(matrix1[0][1]);
    System.out.println(matrix1[1][1]);
    System.out.println(matrix1[2][1]);

    int[] values2 = {1, 2 ,3};
    int[][] matrix2 = new int[3][3];
    matrix2[0] = values2;
    matrix2[1] = values2;
    matrix2[2] = values2;

    matrix2[1][1] = 42;
    System.out.println(matrix2[0][1]);
    System.out.println(matrix2[1][1]);
    System.out.println(matrix2[2][1]);

请注意,在两种情况下,都会多次使用values数组来初始化矩阵的每个 row 。因此,对任何矩阵元素的任何更改都会反映在其他中(因为每个 row 实际上都是同一数组)。在某些情况下,这很有用。如果元素需要独立,则使用如下代码:

    int[] values3 = {1, 2 ,3};
    int[][] matrix3 = new int[3][3];
    System.arraycopy(values3, 0, matrix3[0], 0, values3.length);
    System.arraycopy(values3, 0, matrix3[1], 0, values3.length);
    System.arraycopy(values3, 0, matrix3[2], 0, values3.length);

    matrix3[1][1] = 42;
    System.out.println(matrix3[0][1]);
    System.out.println(matrix3[1][1]);
    System.out.println(matrix3[2][1]);
矩阵的每个都使用相同值的副本进行初始化,但是对任何元素的更改都独立于其他任何元素(因为它是一个不同的数组)。

如果矩阵需要逐个元素初始化,也请参见other question

答案 2 :(得分:0)

如果您需要一个由随机整数填充的2d数组,则可以使用类似于用于生成上面的行的嵌套循环:

public static void main(String[] args) {
    int matrix[][] = new int[20][20];
    for(int i = 0; i < matrix.length; i++){
        for(int j = 0; j < matrix[i].length; j++){
            matrix[i][j] = (int)(Math.random()*1000 + 1);
        }
    }

    for(int[] row : matrix){
        System.out.println(Arrays.toString(row));
    }        
}