我是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;
}
}
答案 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();
}