繁体   English   中英

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

[英]Can I create a multidimensional array using single arrays to fill?

假设我有两个随机生成的数组(行和列),我希望将它们用于填充多维数组。 如果数组是行和列,则多维数组将是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));
  }
}

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

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

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

您可以使用以下命令初始化3d数组:

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

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

在此处输入图片说明

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

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

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

例如,

    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数组来初始化矩阵的每一 因此,对任何矩阵元素的任何更改都会反映在其他行中 (因为每一实际上是同一数组)。 在某些情况下,这很有用。 如果元素需要独立,则使用如下代码:

    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]);

矩阵的每一行都使用相同值的副本进行初始化,但是对任何元素进行的更改都独立于任何其他元素(因为它是一个不同的数组)。

另请参阅另一个问题,是否需要逐个元素初始化矩阵。

如果需要由随机整数填充的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));
    }        
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM