私はデータベースから取得した番号のループ内のリスト<Integer>から取得した変数を使用してリスト<CustomObject>を満たす方法はありますか?
List<Integer> list = new ArrayList<Integer>();
として整数のリストを持っている(このリストは46の異なる番号が含まれている)、私は
List<CustomObject> listNumber2 = new ArrayList<CustomObject>;
CustomObjectとしてカスタムオブジェクトのリストを入力する必要がありさ:
public class CustomObject {
private int DBIndex;
private double value;
//Getters and Setters follow
}
私はlistNumber2
を埋めるために、コードのこの部分を使用:
listNumber2
を充填する前に
list
を印刷し、それはすべてOKだった値をチェックする
Scanner input = new Scanner(System.in);
CustomObject temp = new CustomObject();
for(Integer i:lista) {
temp.setDBIndex(i);
System.out.print("Insert value for index no. " + i + " --> ");
temp.setValue(input.nextDouble());
listNumber2.add(temp);
}
は、それを満たして、それを印刷:それはDBIndex
の46(listNumber2.size()
)回最後の値とvalue
の46倍の最後の値でした。.. 私は1つか2つの小さなものを変更しようとしましたが、すべて同じで、その後デバッガを起動しました。 述べタブVariables
(v
や矢印など>
は):
Name | Value
v list | ArrayList<E> (id=38)
v elementData | Object[49] (id=42)
v [0] | Integer(id=43)
value | 10
> [1] | Integer(id=47)
> [2] | Integer(id=48)
> ... | ...
> modCount | 46
> size | 46
v listNumber2 | ArrayList<E> (id=15)
v elementData | Object[10] (id=41)
v [0] | CustomObject (id=36)
DBIndex | 79
value | 4.45
v [1] | CustomObject (id=36)
DBIndex | 79
value | 4.45
> [2] | CustomObject (id=36)
> ... | ...
v modCount | 46
v size | 46
たびに、デバッグの際に、その命令temp.setDBIndex(i);
for
ループの新しいi
と新しい価値のに変更listNumber2
のすべてのDBIndex
を通過しましたScanner
は、temp.setValue(input.nextDouble());
の後に前のものを上書きするためにvalue
と入力されます。したがって、最後にリスト内のすべてのオブジェクトは同じ値を持ちます。さらに、変数セクションにあるように、リスト内のすべてのオブジェクトはコピーされたのと同じIDを持ちます。 どのように可能ですか?この問題を解決するための選択肢はありますか?