NullPointErexception和对象数组的长度

时间:2014-03-16 06:02:21

标签: java arrays oop constructor

在处理一系列对象时,我遇到了很大的麻烦。基本上我所定义的是以下内容:

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;      
}
}

现在,当我尝试调用涉及遍历对象数组或对象数组长度的方法时,我得到了一个N​​PE。我从一个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;
  }

在涉及播放器阵列元素或其长度的其他类型的代码中,我得到了一个N​​PE。我做错了什么?有什么方法可以避免这种情况,或者有人能告诉我我错过了什么?非常感谢你。

编辑:以下是初始化阵列中玩家的代码:

 public PlayersList()
  {
    Player[] players = new Player[3];
    players[0] = new Player("Hi");
    players[1] = new Player("Bla");
    players[2] = new Player("Foo");
    length = 3;
  }

2 个答案:

答案 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];