2016-04-09 10 views
0

Das Codesegment:einer verschachtelten Schleife für Java-Tracing

ArrayList<ArrayList<Integer>> outer = new ArrayList<ArrayList<Integer>>(); 
ArrayList<Integer> inner = new ArrayList<Integer>(); 
int count = 0; 
for (int i = 0; i < 2; i++) { 
    for (int j = 0; j < 3; j++) { 
     count++; 
     inner.add(count); 
    } 
    outer.add(inner); 
} 
System.out.println(outer); 

I die Schleife wie folgt verfolgen: wenn i = 0 wird inneren zum [1, 2, 3] aktualisiert werden. Daher wird outer[[1, 2, 3]] sein.

Bei i = 1 wird inner auf [1, 2, 3, 4, 5, 6] aktualisiert. Daraus ergibt sich die output die outer ist, wird [[1, 2, 3], [1, 2, 3, 4, 5, 6]]

jedoch sein, wenn ich das Programm ausführen, das output ist eigentlich [[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6]].

Warum ist das so?

Dank

Ich habe die

+1

Sie fügen ** das gleiche ** Array jedes Mal hinzu. –

+1

Die Codes sind völlig nutzlos. Du fügst 'inner' zu 'inner' immer hinzu (was nicht einmal kompiliert wird, da 'inner 'keine Ganzzahl ist und daher nicht in sich passt), ohne etwas anderes hinzuzufügen. Es werden niemals Nummern hinzugefügt. Was Sie sagen, passt nicht zu Ihrem Code. Korrigieren Sie Ihren Code. –

+0

Warum "inner" zu "inner" hinzufügen? Bitte versuchen Sie zu denken atleast –

Antwort

0

Hier ist die komplette Arbeits Code, was Sie genau zu drucken versuchen, Code bearbeitet. Probieren Sie es aus.

 ArrayList<ArrayList<Integer>> outer = new ArrayList<ArrayList<Integer>>(); 
    ArrayList<Integer> inner ; 
     for (int i = 1; i <= 2; i++) { 
      inner = new ArrayList<Integer>(); //each time new ArrayList<Integer> Need to Create. 
      for (int j = 1; j <= i*3; j++) { 

       inner.add(j); 
     } 
      outer.add(inner); 
     } 
System.out.println(outer); 

Ausgang:

[[1, 2, 3], [1, 2, 3, 4, 5, 6]] 

Fehler, die Sie tun, ist Ihr erschafft nicht anderes Objekt von ArrayList<Integer> bei jeder Iteration der äußeren Schleife i. Also, jedes Mal, wenn Sie die int count hinzufügen, werden zu demselben object hinzugefügt.

zB: - In erster Iteration, wenn i = 1 dann inner Schleife [1,2,3] zur inner Arraylist hinzuzufügen.

In der zweiten Iteration, wenn i=2 dann wieder inner Schleife den vorherigen inner Arraylist Objekt initialisieren, die bereits [1,2,3] Jetzt enthält fügen Sie [4,5,6] zu. So ArrayList<Integer> inner werden [ 1 , 2 , 3 , 4 , 5 , 6 ].

Hoffen Sie Ihren Fehler.

Verwandte Themen