java - 修改 ArrayList 中的 ArrayList

标签 java 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 类,我试图在该类中将一个新的玩家对象添加到一个有效的 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. 您无法为方法调用赋值。

    playerAList.get(i) =  currentPlayer;
    

    但是,这应该有效:

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

    playerAList.set(i, currentPlayer);
    

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

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

    return playerAList;
    
<小时/>

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

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

关于java - 修改 ArrayList 中的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30418711/

相关文章:

java - 在 Java Swing 程序中使用命令行参数

c# - 有没有办法像 ArrayList 一样对待 c# 静态数组?

java - 在多线程环境中使用什么; vector 或数组列表

java - 从 Java 访问继承自通用 Java 基类的 Scala 对象

java - Maven WebApp 中的 Jetty SERVICE_UNAVAILABLE 与 Eclipse 中的 Jersey JAX-RS

java - 无法打开套接字文件: process not responding while Dumping the JVM?的原因是什么

java - 如何在 Intellij Idea 中找到所有未使用的类?

Java 多态性与 ArrayList

Java HashMap 导致 ClassCastException

Java:如何比较数组中的每两个元素一次?