2016-07-02 89 views
2

我的代碼如下給我意想不到的輸出。 我想要做的是創建一個多維數組,然後在循環中用x,y,z的值填充它。但由於某種原因,它只填充所有元素中的「最大」值x,y,z。相反,它應該填充當前值。如果您取消註釋第一個System.out行,您會看到我實際需要的結果。我的multiDimentional陣列代碼無法正常工作

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

不,在你的方法中,它只是遞增「增量」。我想要做的是x y z增量。 (增量只是看我在數組中的位置,這並不重要)因此,在我的循環中,x = 0,然後y = 0,然後z運行3次,然後x = 0 y = 1,z重新開始。 z達到3,然後y再次增加1。這繼續。最後y達到5,然後x增加1,依此類推。 –

+0

請在++增量後立即添加此行,您將看到我想要的輸出:System.out.println(x +「」+ y +「」+ z +「」+ increment); –

+0

您的預期產出是多少? –

回答

1

您將值設置爲val,但您在a的每個單元格中設置了val的引用。因此,當val的值發生變化時,值全部參考文件發生變化,因此它們全部變爲9,4,4。最後一個值是s,它在循環中不斷遞增。因此你可以得到那個輸出。

要獲得所需的輸出,只需在每次迭代前重置val即可。添加此行:

val = new int[3]; 

作爲您的最內層for循環中的第一行。

+0

哦非常感謝。這讓我瘋狂。我會從這裏記住這一點。 –