有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在ArrayList中设置特定项,而不出现OutOfBounds错误?

我正在尝试为游戏编写一个交易插件。我的想法是,一个玩家向另一个玩家发送请求,如果另一个玩家接受,那么双方必须选择一个项目进行交易

我有4个数组列表: 存储请求者、存储被请求者、存储请求者选择的项目和存储被请求者选择的项目。问题是,如果多个玩家同时交易,我不能将该项目添加到列表中,因为它可以与其他人的交易匹配。我试着这样做:

requesterItems.set(requesterIndex, clicked);

其中requesterIndex是另一个列表中请求者的索引,单击的是所选项目

我知道为什么会有错误,但我想不出解决办法。问题是列表是空的,并且该索引中没有元素。如何在不接触列表中其他点的情况下添加元素


共 (1) 个答案

  1. # 1 楼答案

    如果可能的话,我会避免使用具体的索引,而是使用对象

    正如在评论中已经提到的,我建议使用自己的类和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!");
    

    我希望这有助于解决你的问题,如果我误解了你,请告诉我!祝你好运