说我有两个随机生成的数组(行和列),我希望将它们用于填充多维数组。如果数组是行和列,则多维数组将是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];
答案 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。
现在如果要打印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));
}
}