我下面的代码给出了意想不到的输出。 我想要做的是创建一个多维数组,然后在循环中用 x、y、z 的值填充它。但由于某种原因,它只填充了所有元素中 x、y、z 的“最大”值。相反,它应该填充当前值。如果您取消注释第一行 System.out,您将看到我真正想要的结果。
public class Test{
public static void main( String args[] ){
int[][] a= new int[ 150 ][3];
int[] val = new int[3];
int increment =0;
for( int x=0; x<10; ++x ){
for( int y=0; y<5; ++y ){
for( int z=0; z<3; ++z ){
val[0]=x; val[1]=y; val[2]=z;
a[ increment ]=val;
++increment;
//System.out.println( x+" "+y+" "+z+" "+ increment )
} } }// for
for( int s=0; s<increment; ++s ){ System.out.println( a[ s ][0]+" "+ a[ s ][1]+" "+ a[ s ][2]+" "+ s ); }
}//main
}//class
我的输出:
9 4 4 0
9 4 4 1
9 4 4 increment
预期输出:
0 0 0 0
0 0 1 1
0 0 2 2
...
0 1 1 3
0 1 2 4
.
.
.
upto so on
我做错了什么?
最佳答案
您在 val
中设置值,然后在 a
的每个单元格中设置对 val
的引用。因此,当 val
的值发生变化时,所有 引用的值都会发生变化,因此它们都变成了 9,4,4
。最后一个值是 s
,它在你的循环中不断递增。这样你就得到了那个输出。
要获得所需的输出,只需在每次迭代前重置 val
。添加这一行:
val = new int[3];
作为最内层 for 循环的第一行。
关于java - 我的多维数组代码无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38159717/