2012-03-15 15 views
-1

私はobject PlayerのarrayListを持っています。プレイヤーはフィールドIDとスコアを持っています。私がplayer with id:1 and score :300を追加したときにarrayListにplayer object with id:1, score:200があると仮定すると、arraylistは現在2つのオブジェクトを持っていますが、両方ともスコア200です。スコア100とスコア1を持つはずです。 私はarrayList.add(player.clone())としてclone()メソッドを試しましたが、私の問題は解決しませんでした。どのようにオブジェクトのコピーを防ぐためにJavaの配列で

コード:

Player player= playerService.getPlayerById(id); 
player.SetScore(100); 
challenge.getPlayerList().add(player.clone()); 
here challenge is an object which has an attribute playerlist 

示唆してください。おかげさまで

+2

質問を編集して、使用している(短い)コードを表示してください。 –

+0

...また、あなたの質問を修正して、それに従うことは難しいです... – Nim

+0

コードの一部が助けになる –

答えて

0

いくつかのコードを表示しなければ、私は同じPlayerオブジェクトを追加していますが、値が異なると思います。あなたの場合:

  • idを持つプレーヤーを追加:1とスコア:100
  • 変更することPlayerオブジェクトの値を獲得するために:200
  • を再び

あなたが持っているだろう、そのオブジェクトを追加します。 2 Playerオブジェクトの最後の値を持つリスト内のプレーヤー。

new Player()に新しい値を設定する必要がある場合は、同じPlayerオブジェクトを再利用するだけではありません。

参照による呼び出しについては、この記事を読んで、値による呼び出し:http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html

+0

ありがとう、同じIDと新しいスコアで新しいプレーヤーを使用して:) – Romi

4

リスト/アレイにオブジェクトを追加すると、そのオブジェクトをコピーすることが一般的な間違いです。

真実の場合は、オブジェクトではなくコレクションに参照を追加し、は参照番号です。

newまたはclone()が呼び出されるたびに新しいオブジェクトを作成します。

// Don't do this 
Player p = new Player(1, 100); 
list.add(p); 
list.add(p); // adds a reference to the same object. 

// Do this 
list.add(new Player(1, 100)); 
list.add(new Player(2, 200)); 
1

あなたがリストにPlayerの2つのインスタンスを追加する場合、そのリストには2つのインスタンスがある場合でも、両方のアイテムを持っています同じオブジェクト。

あなたは間違った値を使用して2つ目のインスタンスを参照する場合は、あなたのいずれか

  • が間違ったオブジェクトまたは
  • を追加しましたが(リストに)間違った場所/インデックスを見
0

この:あなたが実現してきたように

Player player= playerService.getPlayerById(id); 
player.SetScore(100); 
challenge.getPlayerList().add(player.clone()); 

は、リストには、2つの重複するアイテムを追加します。だけでなく、両方の新しいプレイヤーのスコアを設定します

Player player= playerService.getPlayerById(id); 
Player clone = (Player)player.clone(); 
clone.SetScore(100); 
challenge.getPlayerList().add(clone); 

この:私はあなたが質問している読んでいる場合は、右あなたは本当にのような何かをしたいです。これで、元のスコアを持つプレイヤーとスコア100のプレイヤーのリストが表示されます。

関連する問題