有 Java 编程相关的问题?

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

java在ArrayList中修改ArrayList

我有三节课。玩家等级:

public class Player
{
private String playerName;
private int playerWorth;
private int playerSpent;
// A list of player prize objects.
private ArrayList<Prize> playerPrizeList;

public void Player()
{
     playerPrizeList = new ArrayList <Prize>();
     playerName = "";
     playerWorth = 0;
     playerSpent = 0;
}

public void playerDetails(String playerName, int playerWorth, int playerSpent)
{
    setPlayerName(playerName);
    setPlayerWorth(playerWorth);
    setPlayerSpent(playerSpent);
}

public void prize(String prizeName, int prizeWorth, int prizeCost)
{
    populatePrize(prizeName, prizeWorth, prizeCost);
}

private void populatePrize(String prizeName, int prizeWorth, int prizeCost)
{
    playerPrizeList.add(new Prize(prizeName, prizeWorth, prizeCost));
}

另一个类是PlayerList类,在这个类中,我试图将一个新的player对象添加到一个arrayList中,这个arrayList可以工作,但是在这个player类中,我还有一个prizeList数组(奖品对象)。将播放器添加到ArrayList后,如何检索该对象并更改(我的最后一块代码)。我希望我正确地解释了这一点

public class PlayerList
{
private ArrayList<Player> playerAList; 

public PlayerList() 
{
    playerAList = new ArrayList<Player>();
}

public ArrayList<Player> addPlayer(String playerName, int playerWorth, int playerSpent)
{
    Player newPlayer = new Player();
    newPlayer.setPlayerName(playerName);
    newPlayer.setPlayerWorth(playerWorth);
    newPlayer.setPlayerSpent(playerSpent);
    playerAList.add(newPlayer);
    return playerAList;
}

/**
 * @i is the index of ArrayList for Player Prizes
 */
public void setPlayerPrizeList(int i, String prizeName, int prizeWorth, int prizeCost)
{
    playerAList.get(i) =  currentPlayer;
    currentPlayer.populatePrize(prizeName, prizeWorth, prizeCost);
    playerAList.set(i, currentPlayer);
    return playerAList;
}

共 (1) 个答案

  1. # 1 楼答案

    总的来说,你的方法看起来不错

    但是,您的代码中存在一些问题:

    1. 不能为方法调用赋值

      playerAList.get(i) =  currentPlayer;
      

      然而,这应该是可行的:

      currentPlayer = playerAList.get(i);
      
    2. 除此之外,您不需要此行:

      playerAList.set(i, currentPlayer);
      

      使用此方法更改的Player将保留在列表中并“自动更新”,因为所有更改都在同一内存块上执行,因此已在其中创建了Player。您的playerAListcurrentPlayer都持有对此内存块的引用

    3. 还有一件事是错的。不能从返回类型为void的方法中return任何内容:

      return playerAList;
      

    总之,您的方法setPlayerPrizeList()应该如下所示:

    public void setPlayerPrizeList(int i, String prizeName, int prizeWorth, int prizeCost) {
        currentPlayer = playerAList.get(i);
        currentPlayer.populatePrize(prizeName, prizeWorth, prizeCost);
    }