2016-04-09 3 views
0

ためのネストしたJavaのトレースコードセグメントは次のとおりです。がループ

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 = 0、インナーは[1, 2, 3]に更新されるとき 。したがって、outer[[1, 2, 3]]になります。

i = 1の場合、inner[1, 2, 3, 4, 5, 6]に更新されます。したがってouterあるoutputは私がプログラムを実行すると、outputが実際[[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6]]ある、しかし[[1, 2, 3], [1, 2, 3, 4, 5, 6]]

になります。

これはなぜですか?私はここでは、コード

+1

**同じ**配列を毎回追加しています。 –

+1

コードは完全に役に立たない。 'inner'を常に' inner'に追加しています( 'inner'は整数ではないのでコンパイルされません。したがって、それ自体には適合しません)。決して数字は追加されません。あなたの言うことはあなたのコードに合っていません。コードを修正してください。 –

+0

なぜ 'inner'を' inner'に追加するのですか? atleastを考えてみてください –

答えて

0

を編集した

おかげ

は、あなたが正確に印刷しようとするどのような完全なワーキングコードです。これを試してみてください。

 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); 

出力

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

間違いあなたはあなたが外部ループiの各繰り返しでArrayList<Integer>の別のオブジェクトを作成していないです。したがって、毎回毎回int countを追加すると、同じobjectに追加されます。

例: - 最初の反復で、の場合、innerループは、inner ArrayListに[1,2,3]ループを追加します。 2回目の反復で

i=2その後、innerループ再びすでに[1,2,3]今、あなたがそれに[4,5,6]を追加が含まれている以前のinner ArrayListオブジェクトを初期化します。従ってArrayList<Integer> inner[ 1 , 2 , 3 , 4 , 5 , 6 ]になります。

あなたの間違いがありました。