2017-03-09 25 views
0

私はゲームに取り組んでいますが、2人のarraylistsにオブジェクトを追加して、そのうちの1人を更新するともう一方のオブジェクトが更新されないことに気付きました。これを解決することは可能ですか?複数のarraylistsに同じオブジェクトを追加する

レンダリング時にループしているすべてのタイルのリストがあります。しかし、私はまた、インベントリスロットを取得するためにすべてのゲームタイルをループするのではなく、インベントリクラスにスロットのリスト(Tileを拡張)が必要です。私はスロット(インベントリクラス)追加する場所Game.tilesとInventory.slots

これはされています:

は、私は2つのリストを持っている

for(int i = 0; i< 16; i++){ 
Slot slot = new Slot(); 
Game.tiles.add(slot); 
slots.add(slot); 
} 

をそして、私はスロット(インベントリクラス)を変更場所です。

for(int i = 0; i< 16; i++){ 
slots.get(i).visable = false; 
} 

問題は、スロットリストのスロットのデータは更新されますが、Game.tilesリストの同じスロットのデータは更新されないということです。

全在庫クラス:http://pastebin.com/KS5BNB3F

+0

両方の配列リストに同じインスタンスを追加しますか? – nbokmans

+1

いいえ...オブジェクトが同じであれば、すべてのリストにその参照があります....リストAのオブジェクトを変更すると、1つのインスタンスにのみ影響します...コードを投稿してください –

+0

.... –

答えて

-1

オブジェクトのインスタンスを作成し、両方の配列に追加します。それらの配列は同じ参照を持ちます。つまり、オブジェクトを更新すると、両方の配列で更新されます。

1

2つの異なるArrayListにオブジェクトを追加すると、実際にオブジェクトへの参照のみが追加されます。したがって、オブジェクトを変更すると、両方のリストに同時に反映されます。

public class Clazz{ 
    private Integer d = 0; 
    public static void main(String[] args) throws Exception { 
     Clazz obj = new Clazz(); 
     List<Clazz> list1 = new ArrayList<Clazz>(); 
     List<Clazz> list2 = new ArrayList<Clazz>(); 
     list1.add(obj); 
     list2.add(obj); 
     obj.d = 15; 
     System.out.println(list1.get(0).d); //prints 15 
     System.out.println(list2.get(0).d); //prints 15 
    } 
} 
+0

私のコードをこれに変更しましたが、まだ動作していないようです: 'for(int i = 0; i <16; i ++){ \t \t \t Slot slot = new Slot(100 +(i * 64) )、900、true)。 \t \t \t Game.tiles.add(slot); \t \t \t slot.add(slot); \t \t}「私は何か間違っていますか? – MCrafterzz

+0

16種類の 'Slot'オブジェクトを' Game.tiles'と 'slots'の両方に追加しています。スロットオブジェクト5を変更すると、これらのリストの両方に反映されます。あなたと一緒に起こっていないのですか? – VHS

+0

いいえ、残念です。最初のリストはタイルのためのもので、2番目のリストはスロットのためのものだろうか?私がGame.tilesリストを編集するとレンダリングには影響するが、スロットリストを変更しても影響はない。編集:私はSystem.out.println(Game.tiles.get(i + 2).visable + "、" + slots.get(i).visable)でそれをテストしました。彼らは実際に別のデータを持っています(他の2つのタイルがあるので+2) – MCrafterzz

関連する問題