在处理一系列对象时,我遇到了很大的麻烦。基本上我所定义的是以下内容:
public class PlayersList
{
private Player[] players;
private int length;
private int numPlayer = 0;
}
在这种情况下,玩家来自数据类型的玩家:
public class Player
{
public String UserName;
public Player(String UserName)
{
this.UserName = UserName;
}
}
现在,当我尝试调用涉及遍历对象数组或对象数组长度的方法时,我得到了一个NPE。我从一个3成员阵列开始,我已经初始化了所有三个成员,所以我没有得到这样的东西。但是,如果我尝试使用类似的东西:
public Player findPlayer(String Player)
{
for(int i = 0; i < players.length; i++)
{
if(Player.equals(players[i].UserName))
{
return players[i];
}
}
return null;
}
在涉及播放器阵列元素或其长度的其他类型的代码中,我得到了一个NPE。我做错了什么?有什么方法可以避免这种情况,或者有人能告诉我我错过了什么?非常感谢你。
编辑:以下是初始化阵列中玩家的代码:
public PlayersList()
{
Player[] players = new Player[3];
players[0] = new Player("Hi");
players[1] = new Player("Bla");
players[2] = new Player("Foo");
length = 3;
}
答案 0 :(得分:1)
您正在初始化本地数组
Player[] players = new Player[3];
改为
players = new Player[3];
答案 1 :(得分:1)
构造函数中的players
变量是shadowing字段。
public class PlayersList
{
private Player[] players;
public PlayersList()
{
// shadows the field
Player[] players = new Player[3];
...
在构造函数中执行Player[] players
声明具有相同名称的新变量。删除类型,它将成为字段的赋值而不是声明:
public PlayersList()
{
// now refers to the field
players = new Player[3];