2016-07-02 9 views
2

私のコードは予期せぬ出力を与えます。 私がやろうとしているのは、多次元配列を作成し、ループ内に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

いいえ、あなたの方法では、単に「インクリメント」をインクリメントしています。私がしようとしているのは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 + "" +増分); –

+0

期待される出力は? –

答えて

1

valに値を設定しますが、各セルにvalの参照をaに設定します。したがって、valの値が変更された場合、値すべての参照が変更され、したがってすべてが9,4,4になります。最後の値はsで、ループ内で増分し続けます。したがって、あなたはその出力を得る。

必要な出力を得るには、各繰り返しの前にvalをリセットするだけです。この行を追加してください:

val = new int[3]; 

あなたの最も内側のforループの最初の行です。

+0

ああ、ありがとうございます。これは私を夢中にさせていた。私はここからこれを覚えておきます。 –