java.lang.NullPointerException错误。如何初始化类?

时间:2014-03-21 20:12:52

标签: java

我是java的新手,我正在尝试编写一个简单的游戏,但是我在程序中遇到了这个错误" java.lang.NullPointerException"我无法理解为什么我这样做,所以我在这里发布我的代码。

    public static void main(String[] args) {
       Scanner console = new Scanner(System.in);
       System.out.println("How many players?:");
       int t = console.nextInt();
       Player p[] = new Player[t];
       for(int i=0; i<t; i++){
           System.out.println("Player " + i+1 + " enter your name:");
           p[i].player_name = console.nextLine();
           System.out.println(p[i].player_name + " Easy(1), Medium(2), Hard(3), enter one integer");
           p[i].number = console.nextInt();
           System.out.println("Player " + i+1 + "name: " + p[i].player_name + "your integer is " + p[i].number);
      }
   }

这是我的Player类

public class Player {
   public String player_name;
   public int number;

   public Player() {
       this.player_name = " ";
       this.number = 0;
   }
}

5 个答案:

答案 0 :(得分:4)

Object类型的数组元素默认为null。在尝试分配其字段

之前创建Player的实例
for (int i=0; i<t; i++) {
   p[i] = new Player();
   ...
}   

答案 1 :(得分:2)

您需要先初始化p[i]。你可以把它放在循环中for循环的开头:

p[i] = new Player();

答案 2 :(得分:0)

在这里你制作了一系列玩家,但是你没有用玩家填充它

Player p[] = new Player[t];

首先循环

p[i] = new Player(); 

答案 3 :(得分:0)

这句话唯一的作用

Player p[] = new Player[t];

只是为播放器对象的t引用分配内存。它不会初始化任何Player对象,因此这些引用会引用null对象,因此当您调用

p[i].player_name    

你得到NullPointerException。

答案 4 :(得分:0)

你错过了for循环中新玩家对象的实例化。 当您使用:Player p[] = new Player[t];声明数组时,您只是创建类型为Player的数组。在循环内部分配值之前,请在数组的正确位置实例化对象。即:

for (int i = 0; i < t; i++) {
   p[i] = new Player();
}