2017-03-08 9 views
1

リストをJavaで作成したいのですが、これは私が使っているコードです。リストのリストを作成する

[oddy1, minino1, libertad1][[oddy1, minino1, libertad1]] 

[oddy2, minino2, libertad2][[oddy2, minino2, libertad2], [oddy2, minino2, libertad2]] 

[oddy3, minino3, libertad3][[oddy3, minino3, libertad3], [oddy3, minino3, libertad3], [oddy3, minino3, libertad3]] 

[[], [], []] 

私もObjectsObject[]の配列としてlistOfRowsを定義しようとした、大きさの数と:私はリストの最終的なリストを見ると

public ArrayList<ArrayList<Object>> getRows(){ 
    ArrayList<ArrayList<Object>> listOfRows = new ArrayList<ArrayList<Object>>(); 
    ArrayList<Object> temporalRow = new ArrayList<Object>(); 
    IntNode rowSentinel = newTable.sentinel; 
    for (int y = 0; y < this.numberOfRows; y++) { 
     for (int x = 0; x < this.numberOfColumns; x++) { 
      rowSentinel =rowSentinel.next; 
      Object rowElement = rowSentinel.arrayCol.get(y); 
      temporalRow.add(rowElement); 
     } 
     rowSentinel = newTable.sentinel; 
     listOfRows.add(temporalRow); 
     System.out.print(temporalRow); 
     System.out.println(Arrays.toString(listOfRows.toArray())); 
     temporalRow.clear(); 
    } 
    return listOfRows; 
} 

しかし、コンソールは私に次のような出力を提供します行を追加し、要素を追加するのはObject[0]Object[1]などですが、同じ結果が得られました。

私は、私は本当に私はコードで間違ってやっているものを見ていないフォーム

[[oddy1, minino1, libertad1],[oddy2, minino2, libertad2],[oddy3, minino3, libertad3]] 

の最終的なリストを取得したいです。誰も私にこれを手伝ってもらえますか?

+0

可能な重複:[http://stackoverflow.com/questions/1474954/working-with-a-list-of-lists-in-java](http://stackoverflow.com/questions/1474954/working) -with-a-list-in-java-in-java) –

+0

デバッガを使ってみると、論理エラーを見つけるのに役立ちます。 –

+0

私はそれをやろうとしていますが、私はそれを見ません。私は何らかの理由でlistOfRowsを追加するときはいつでも、プログラムのその時点でtemporalRowが参照しているものを追加しています。私は本当に何が起こっているのか分からない。 – user284639

答えて

0

temporalRow.clear()temporalRow = new ArrayList<Object>()に置き換えてください。現在、listOfRowsには同じオブジェクトへの参照が3回含まれており、以前追加した要素は常にtemporalRow.clear()で削除されます。

0

temporalRowリストはtをオブジェクトへの参照が含まれており、そのオブジェクトがどこか別の場所に変更された場合、変更内容は明らかに、であるため、上記のコードの出力は5とある

ArrayList<Test> temporalRow = new ArrayList<Test>(); 

    Test t = new Test(); 
    t.i = 5; 
    temporalRow.add(t); 
    System.out.println(temporalRow.get(0).i); 
    t.i = 6; 
    System.out.println(temporalRow.get(0).i); 

    class Test { 
public int i; 
} 

以下のコードをチェックアウトtemporalRowに反映されます。あなたの場合も同様です。 (ヒント:temporalRow.clear();ディープコピーvsシャローコピーの概念に慣れたがっていると思います。

関連する問題