可能であれば具体的なインデックスで作業し、代わりにオブジェクトで作業することは避けています。
コメントで既に述べたように、私はHashMapで独自のクラスをお勧めします。相続人は、私はそれを行うだろうようなコードのビット(テストされていない!!):
private HashMap<YourPlayerClass, List<YourItemClass>> playerItemMap = new HashMap<>();
private void tradeItems(YourPlayerClass p_player1, YourPlayerClass p_player2,
YourItemClass p_itemOfPlayer1, YourItemClass p_itemOfPlayer2)
{
List<YourItemClass> itemsOfPlayer1 = playerItemMap.get(p_player1);
List<YourItemClass> itemsOfPlayer2 = playerItemMap.get(p_player2);
//Carry out the trade for player 1
itemsOfPlayer1.remove(p_itemOfPlayer1);
itemsOfPlayer1.add(p_itemOfPlayer2);
playerItemMap.put(p_player1, itemsOfPlayer1); //Not sure if this put is necessary
//Carry out the trade for player 2
itemsOfPlayer2.remove(p_itemOfPlayer2);
itemsOfPlayer2.add(p_itemOfPlayer1);
playerItemMap.put(p_player2, itemsOfPlayer2); //Not sure if this put is necessary
}
だからキーとしてプレイヤーとリスト値として彼/彼女のアイテムとHashMapをtheresの。
このコード例は、安全に問題がないわけではありません。アイテムを実際にこのリストに入れてエラーを回避するには、何らかのチェックを追加することをお勧めします。 Like:
if(itemsOfPlayer1.contains(p_itemOfPlayer1))
{
//Carry out the trade
}
else
System.err.println("Player 1 tried to trade an item which wasn't in his/her inventory! Shouldn't be possible!");
私はこれがあなたの問題を解決するのに役立つことを願っています。あなたが間違っているかどうか教えてください!がんばろう!
なぜすべてのトランザクションで同じリストを使用していますか?これは悪いデザインのように聞こえますIMHO – Lino
何とかアイテムを保管しなければならないので、両陣営が受け入れると、プレーヤーの在庫に入れられます。あなたの考えは? –
代わりに地図で作業することができます。また、あなたのソリューションを再考することをお勧めします。あなたは、単一の取引の情報を保管する貿易クラスのようなものを作成することをお勧めします。 – Christian