Java 当方法调用另一个方法时,ArrayList为null?

Java 当方法调用另一个方法时,ArrayList为null?,java,arraylist,null,Java,Arraylist,Null,我正在试着调试PickPlayer。列表“players”在添加“choice”后被成功填充,但是当调用“isplay”时,它是空的 有人知道为什么吗?我确保推送拾取的第一个元素,因此它实际上不应该是空的arraylist;我看不到它在哪里清空了玩家,一旦完成并调用了“isplay” public abstract class Game { protected ArrayList<Player> players; public Game(String gameName, int n

我正在试着调试PickPlayer。列表“players”在添加“choice”后被成功填充,但是当调用“isplay”时,它是空的

有人知道为什么吗?我确保推送拾取的第一个元素,因此它实际上不应该是空的arraylist;我看不到它在哪里清空了玩家,一旦完成并调用了“isplay”

public abstract class Game {
protected ArrayList<Player> players;

public Game(String gameName, int numPlayers) {
    this.name = gameName;
    this.totalPlayers = numPlayers;
}

public void pickPlayers(ArrayList<Player> players, int num){
    // rand int between 0 and number of players
    Random generator = new Random(); 
    int rand = generator.nextInt(num) + 0;

    Player choice = null;       
    int i = 0;

    // first player
    for (Player player: players){
        if (i == rand){
            choice = player;
        }
        i++;
    }
    players.add(choice);
    i=1;

    while (i < num){
        rand = generator.nextInt(num) + 0;

        int a=0;
        for (Player player: players){
            if (a == rand){
                choice = player;
                System.out.println(choice.getName());
            }
            a++;
        }

        if (!isPlaying(choice)){
            i++;
            players.add(choice);
            choice.play();
            System.out.println(choice.getName());
        }
    }
}

public boolean isPlaying(Player p){
    return players.contains(p);
}
}
公共抽象类游戏{
受保护的ArrayList玩家;
公共游戏(字符串游戏名,整数玩家){
this.name=游戏名;
this.totalPlayers=numPlayers;
}
公共无效选取玩家(ArrayList玩家,int num){
//rand int介于0和玩家数量之间
随机生成器=新随机();
int rand=generator.nextInt(num)+0;
玩家选择=空;
int i=0;
//第一名选手
用于(玩家:玩家){
如果(i==rand){
选择=玩家;
}
i++;
}
玩家。添加(选择);
i=1;
while(i
您正在修改的arrayList是传递到
pickPlayers
方法的
Players
,并且是该方法的本地列表


将此arrayList传递给
isPLayer
,或者不将arrayList传递给
pickPlayers

,因为它们是不同的对象。在
pickPlayers
中操作的
players
列表是一个参数,但是
isPlaying
中的列表是
Game
的成员,您正在从列表中随机挑选玩家并添加到同一列表中。另一件事是在循环之外添加选择

而且,您永远不会初始化

protected ArrayList<Player> players;
受保护的ArrayList播放器;

所以它总是空的,这是一个实例变量。调用
pickPlayers()
函数时,函数
players
是一个局部变量。

将播放器传递给
pickPlayers(ArrayList players,int num)
,这是不必要的,因为piclPlayers()与ArrayList players位于同一个类中。ArrayList Player是实例变量,在整个类中可见。因此,不要将数组列表播放器传递给同一类中的方法。

您必须实例化ArrayList。
您必须执行players=newarraylist();内部方法

之后,您可以添加对象,否则它将显示NullPointerException。

我确实在编辑传入的对象,而不是处于传入状态的对象。我的教授在文档中指定,传入的和处于状态的是同一个名称(可能是拼写错误?),一旦我更改了名称并初始化了arraylist,它就可以正常工作了。非常感谢你的帮助。