2016-07-02 10 views
2

Mein Code unten gibt mir eine unerwartete Ausgabe. Was ich versuche, ist ein multidimensionales Array zu erstellen und es dann mit Werten von x, y, z innerhalb einer Schleife zu füllen. Aber aus irgendeinem Grund füllt es nur den "maximalen" Wert von x, y, z in allen Elementen. Stattdessen sollte es den aktuellen Wert füllen. Wenn Sie die erste Zeile von System.out auskommentieren, sehen Sie das Ergebnis, das ich tatsächlich möchte.Mein multidimensionaler Array-Code funktioniert nicht richtig

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 

meine Ausgabe:

9 4 4 0 
9 4 4 1 
9 4 4 increment 

erwartete Ausgabe:

0 0 0 0 
0 0 1 1 
0 0 2 2 
... 
0 1 1 3 
0 1 2 4 
    . 
    . 
    . 
upto so on 

Was habe ich falsch gemacht?

+0

Nein, in Ihrer Methode wird nur das "Inkrement" erhöht. Was ich versuche, ist x y z Inkrement. (Inkrement ist nur um zu sehen, wo ich im Array bin. Das ist nicht wichtig) Also in meiner Schleife, x = 0, dann y = 0, dann läuft z 3 mal, dann x = 0 y = 1 und z beginnt von vorne. z erreicht 3, dann wird y erneut um 1 erhöht. Das geht weiter. Schließlich erreicht y 5, dann wird x um 1 erhöht und so weiter. –

+0

Bitte fügen Sie diese Zeile bald nach ++ Inkrement hinzu und Sie werden die gewünschte Ausgabe sehen: System.out.println (x + "" + y + "" + z + "" + Inkrement); –

+0

Was ist Ihre erwartete Ausgabe? –

Antwort

1

Sie legen die Werte in val fest, aber dann setzen Sie eine Referenz von val in jeder Zelle von a. Wenn der Wert von val geändert wird, ändern sich die Werte die Referenzen und daher werden sie alle 9,4,4. Der letzte Wert ist s, der in Ihrer Schleife weiter zunimmt. So bekommst du diese Ausgabe.

Um die erforderliche Ausgabe zu erhalten, setzen Sie val vor jeder Iteration zurück. Fügen Sie diese Zeile hinzu:

val = new int[3]; 

als die erste Zeile in Ihrer innersten for-Schleife.

+0

oh vielen Dank. Das hat mich verrückt gemacht. Das werde ich von jetzt an im Hinterkopf behalten. –