2012-01-02 14 views
0

こんにちは、Javaでは数時間しかありません。 (Pythonから) 多次元配列を定義し、それに "add"メソッドを設定しようとしています。多次元ArrayListにアイテムを追加

[( "UW、" 100 ")、(" UM」、 "10")、(:私はこれで終わるためにDrawInstructionsを期待

List<String[]> DrawInstructions = new ArrayList<String[]>(); 
String[] pair = {"",""}; 

pair[0]="UW"; 
pair[1]="100"; 
DrawInstructions.add(pair); 

pair[0]="UM"; 
pair[1]="10"; 
DrawInstructions.add(pair); 

pair[0]="UT"; 
pair[1]="50"; 
DrawInstructions.add(pair) 

:しかし、私はいくつかの奇妙な結果を見ています"UT"、 "50")]

しかし、その代わりに、私は取得しています:

[( "UT"、 "50")、( "UT"、 "50")、( "UT"、」 50 ")]

これはかなり基本的なものだと確信していますが、私はそれを理解することはできません。私は数時間を探しました。何かアドバイスをお願いします。

+2

同じオブジェクトをリストに3回追加しています。 'add'関数はオブジェクトをクローンしません。 – DRCB

+0

http://stackoverflow.com/questions/40480/is-java-pass-by-reference –

答えて

2

同じアレイ(ペア)を3回追加しています。あなたがしているのは、その価値(内容)を変えることだけです。 javaはオブジェクトのコピーではなく、参照で動作することを忘れないでください。

pair1、pair2、pair3を作成してください。

+0

これは説明しています。回答いただきありがとうございます。 –

1

あなたは、あなたが同じオブジェクトを3回に編集し、リストにあることを追加しただけで1 String[] pair = {"",""};

を定義しました。 あなたはそれを行うことができます:

List<String[]> DrawInstructions = new ArrayList<String[]>(); 

String[] pair1 = {"",""}; 
pair1[0]="UW"; 
pair1[1]="100"; 
DrawInstructions.add(pair1); 

String[] pair2 = {"",""}; 
pair2[0]="UW"; 
pair2[1]="100"; 
DrawInstructions.add(pair2); 
.... 
3

問題がある、あなたは何度も同じ配列を変更している - あなたのためのコピーを作成しません.add()。次のことを試してみてください。

より良い
List<String[]> DrawInstructions = null; 
String[] pair = {"",""}; 

pair[0]="UW"; 
pair[1]="100"; 
DrawInstructions.add(pair); 

pair = new String[] {"",""}; 
pair[0]="UM"; 
pair[1]="10"; 
DrawInstructions.add(pair); 

pair = new String[] {"",""}; 
pair[0]="UT"; 
pair[1]="50"; 
DrawInstructions.add(pair); 

か、そして、

List<String[]> drawInstructions = new ArrayList<String[]>(); 
drawInstructions.add(new String[] {"UW", "100"}); 
drawInstructions.add(new String[] {"UM", "10"}); 
drawInstructions.add(new String[] {"UT", "50"}); 

、Javaの命名基準に近いもののNPEを避けるため、ローカル状態を最小限に抑え、そして間違いなく読みやすくなると思われます。

関連する問題