1

80 個の Arraylist の ArrayList を作成しました。内部の各 ArrayList には、1 ~ 9 の値があります。

ただし、Arraylists の 1 つから値を削除すると、すべての Arraylists で削除されます。

ArrayList<List> available = new ArrayList<List>();
ArrayList<Integer> possibleValues = new ArrayList<Integer>();



    for(int j = 1; j<=9; j++){
        possibleValues.add(j);
    }

    for (int i = 0; i<=80; i++){
        available.add(possibleValues);  
    }

     int b = (int) available.get(0).get(2);
     available.get(0).remove(0);
     String s = available.get(80).toString();
     System.out.println(" " + s);

}

どんな助けでも大歓迎です。

4

4 に答える 4

6

ここでの問題は、同じArrayList possibleValuesものをavailable81 回追加したことです。したがって、availableリストには同じリストへの 81 の参照が含まれていpossibleValuesます。

リストに加えられた変更は、これら 81 の参照のいずれかを通じて表示されます。

変更がすべての参照に表示されるのではなく、1 つだけ表示されるようにする場合は、追加するリストのコピーを 81 個作成する必要があります。

for (int i = 0; i<=80; i++){
    available.add(new ArrayList<Integer>(possibleValues));  
}
于 2013-10-25T16:13:09.557 に答える
1

ArrayListこれは、outer のすべてのインデックスに同じものを追加しているためですArrayList。これArrayListを変更すると、自動的に他方が変更されArrayListます。

ループをネストして、常に新しいループを作成するArrayListArrayList、既存のものから新しいループを構築します。

于 2013-10-25T16:12:46.403 に答える
1

同じArrayListに値を追加しているためです。0 ~ 80 回の反復に対して新しい Arraylist を作成する必要があります。

for(int j = 1; j<=9; j++){
        possibleValues.add(j);// one ArrayList with values.
}


for (int i = 0; i<=80; i++){
        available.add(possibleValues); //Here adding same Arraylist 80 times.  
}

これを試してみてください

  ArrayList<List> available = new ArrayList<List>();
  ArrayList<Integer> possibleValues = new ArrayList<Integer>();

  for (int i = 0; i<=80; i++){
    possibleValues = new ArrayList<Integer>();
    for(int j = 1; j<=9; j++){           
        possibleValues.add(j);
    } 
    available.add(possibleValues);  
  }
于 2013-10-25T16:13:25.687 に答える