如果可能,我會避免使用具體索引,而使用對象。
正如已經在評論中提到的那樣,我會推薦一個帶有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。
該代碼示例不是故障安全的。我建議添加一些檢查項目是否真的在這個列表中以避免錯誤。喜歡:
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!");
我希望這有助於解決您的問題,讓我知道如果我錯了你!祝你好運!
你爲什麼要對所有交易使用相同的清單?這聽起來像一個糟糕的設計恕我直言 – Lino
因爲我必須以某種方式儲存物品,所以當雙方都接受時我可以把它們放在玩家的庫存中。你有什麼想法? –
您可以改爲使用地圖。另外,我會建議你重新考慮你的解決方案。我建議你創建一個類似貿易類的東西,在那裏存儲一筆交易的信息。 – Christian