下面的代码给了我意想不到的输出。 我要做的是创建一个多维数组,然后在循环中用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
我做错了什么?
答案 0 :(得分:1)
您可以在val
中设置值,但随后在val
的每个单元格中设置a
的引用。因此,当val
的值发生更改时,引用的值 all 会发生变化,因此它们都会变为9,4,4
。最后一个值是s
,它在循环中继续递增。这样就可以得到那个输出。
要获得所需的输出,只需在每次迭代前重置val
。添加以下行:
val = new int[3];
作为最里面for循环的第一行。