2011-12-15 17 views
1

clearコマンドが行内のデータを削除するため、同じarraylist行を使用して入れ子配列tableValuesに値を追加するにはどうすればよいですか。Javaがネストされた配列にデータを追加する

おかげ

ArrayList<ArrayList<String>> tableValues = new ArrayList<ArrayList<String>>(); 
    ArrayList<String> row = new ArrayList<String>(); 

    row.add("a"); 
    row.add("b"); 
    row.add("c"); 
    tableValues.add(row); 
    row.clear(); 

    row.add("d"); 
    row.add("e"); 
    row.add("f"); 
    tableValues.add(row); 
    row.clear(); 

    row.add("g"); 
    row.add("h"); 
    row.add("i"); 
    tableValues.add(row); 
    row.clear(); 

    System.out.println(tableValues); 

答えて

3

私はあなたが本当には各row.clear()に3つの異なるのArrayListを追加するので、変更したいと確信している:なぜあなたは "にしたい

row = new ArrayList<String>(); 

値を加算するのに同じarraylist行を使用しますか?なぜあなたのトップレベルArrayListに基本的に同じ参照が3回含まれているのかわかりません。なぜあなたはではないのですか?は、それらを独立したリストへの参照にしたいのですか?

+0

私は、行1、行2、行3などを持っていないと思っていました。問題が発生する可能性があるので、行がいくつあるか分からないからです。 – Ricco

+0

@Ricco:右 - オブジェクト*と*変数*。現在は1つの変数を使用していますが、その変数は3つの異なる値を持ちます。 (私は別のメソッドに "行を追加する"部分をリファクタリングするように誘惑されるだろうが、それは私がより多くの文脈を必要とする少し異なるトピックです。) –

0

使用

ArrayList<String> row; 

row = new ArrayList<String>(); 
// fill row 
tableValues.add(row); 

row = new ArrayList<String>(); 
// fill row 
tableValues.add(row); 

のようなものあなたは、各行のためのあなたのコードの変数にする必要はありませんこの方法です。 サイクルに現在追加された行のため

while(codnition) { // or for or do {} while(condition); 
    List<String> row = new ArrayList<String>(); 
    // fill row 
    table.add(row); 
} 

これが方法単一の名前を、それを置くか、または、この変数のスコープは、内部サイクルの反復が与えられます。

関連する問題