我的multiDimentional数组代码无法正常工作

时间:2016-07-02 11:38:25

标签: java multidimensional-array

下面的代码给了我意想不到的输出。 我要做的是创建一个多维数组,然后在循环中用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

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您可以在val中设置值,但随后在val的每个单元格中设置a的引用。因此,当val的值发生更改时,引用的值 all 会发生变化,因此它们都会变为9,4,4。最后一个值是s,它在循环中继续递增。这样就可以得到那个输出。

要获得所需的输出,只需在每次迭代前重置val。添加以下行:

val = new int[3];

作为最里面for循环的第一行。

相关问题