2016-06-29 6 views
1

で特定のインデックスを設定してください私はそれは私が欲しいものを私にはどのように私は2次元のArrayList

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 

を与え、次の

ArrayList<ArrayList<Integer>> row = new ArrayList<ArrayList<Integer>>(); 
ArrayList<Integer> column = new ArrayList<Integer>(); 
for(int i = 0; i < 12; i++) { 
    column.add(0); 
} 
for(int j=0; j < 12 ; j++) { 
    row.add(column); 
} 

を持つArrayListの中で特定のインデックスを交換することです。 9番目のインデックスの2番目のarrayListを考えてみましょう。

row.get(2).set(3, 9); 

が、列全体を代わりに9で置き換えます。他の行に影響を与えずにarrayListを特定に設定する必要があります。

+0

*同じ*列を12回追加します。 – luk2302

+0

各行にyesを指定します。それは12x12になるでしょう – logger

答えて

5

あなたは現在、12回とまったく同じ列を追加しますが、12個の異なるもの、最初は同じように形のすべてを追加する必要があります

ArrayList<ArrayList<Integer>> row = new ArrayList<ArrayList<Integer>>(); 

for(int j=0; j < 12 ; j++) { 
    ArrayList<Integer> column = new ArrayList<Integer>(); 
    for(int i = 0; i < 12; i++) { 
     column.add(0); 
    } 
    row.add(column); 
} 
+0

うわー、私はそれを逃したと信じられない... – logger

1

あなたがそうでない場合は本当にすべての列が変更によって影響を受けることになりますあなたが列を持っているとして、あなたは次のように最初のコピーを作成する必要がArrayListの同じインスタンスに何度でも追加これは、次のとおりです。

for(int j=0; j < 12 ; j++) { 
    row.add(new ArrayList<>(column)); 
} 
1

それはそれだけで一つの値を置き換え、すべての値を置き換えるものではありません。あなたの問題は、rowリストの12個すべての要素が同じ列リストを参照していることです。

の新しい列番号を作成する必要があります。

はまた、インデックスはゼロベースされているので、第三インデックスの第二のArrayListを設定するために、あなたは、インデックス1と2を、指定する必要はありません2及び3

あなたは行列の正確なサイズがわかっている場合は、 ArrayListではなく、通常の配列を使用する必要があります。

関連する問題