下一个代码创建一个名为' arista'的随机多维数组,并用整数填充md-array的每个槽。
然后,它打印出来。你可以看到插槽是如何填充整数的。 然后我尝试创建一个名为' lista'的数组,它应该是一个包含存储在多维数组中的所有值的列表,方法是键入:
System.out.printf(Arrays.toString(lista));
但结果并非我的预期。只有#arista的最后一排'出现在数组' lista'以及阵列的其他部分插槽' lista'是零。
我怎么能纠正这个?怎么了?
完整的代码是:
public static void main(String[] args) {
int renglones = (int) (Math.random() * 5) + 5;
int columnas = (int) (Math.random() * 5) + 5;
int[][] arista = new int[renglones][columnas];
int[] lista;
lista = new int[renglones * columnas];
int k = 1;
for (int i=0; i < renglones; i++ ){
for (int j=0; j < columnas; j++) {
arista[i][j] = k++;
lista[j] = arista[i][j];
}
}
for (int i = 0; i < renglones; i++) {
for (int j = 0; j < columnas; j++) {
System.out.printf("[%d][%d] = %d \n", i, j, arista[i][j]);
}
System.out.println();
}
System.out.printf(Arrays.toString(lista));
}
答案 0 :(得分:0)
您重复使用j
作为lista
的索引是不正确的。当j
从0
重新开始时,它将覆盖第一个j
条目的内容,只留下最后一行。
i
乘以j
也不起作用;当其中任何一个为0
时,您将覆盖第一个条目,因为您的计算索引将为0
。
当i
从0
转到1
时,您希望从第一个columnas
条目之后的索引号开始,而不是0
。当i
从1
转到2
时,您希望从索引2*columnas
开始。
-- 1st row -- -- 2nd row --
[0][1]...[columnas - 1] [columnas][columnas + 1] ... [2*columnas - 1] ...
在i
后面加columnas
,然后添加j
以获取您的索引。
lista[i*columnas + j] = arista[i][j];