这些奇怪的错误是什么?

时间:2015-11-20 07:59:12

标签: java

我不确定我在这里做错了什么。我是Java编程的新手。

我的目标是让4名玩家输入他们的名字和游戏分数,然后按降序或分数返回姓名和分数。

我创建了一个带有播放器的类。然后制作一个动态变量来改变我制作的对象数量。

我要求用户名,然后是分数,但那是我遇到的问题。该程序编译良好,但它告诉我这个。 "播放器#1的名称是什么?线程中的例外"主"显示java.lang.NullPointerException
        在HelloWorld.main(HelloWorld.java:20)"

我不确定为什么我会收到此错误。任何人都可以帮助我吗?

//Array
import java.util.*;

public class HelloWorld {
    public static void main(String[] args){

        Scanner input = new Scanner(System.in);
        int allPlayers;
        int index[] = new int[12];
        int i;
        System.out.print("Please enter the number of players");
        allPlayers = input.nextInt();

        Player[]  playersArray = new Player[allPlayers];

        for(i = 0; i <allPlayers; i++){
            System.out.print("What is the name of Player # " + (i+1) +"?");
            playersArray[i].name = input.nextLine();
            System.out.print("What was the score of Player # " + (i+1) + "?");
            playersArray[i].score = input.nextInt();
         }

         for(i = 0; i <allPlayers; i++){
             for(int j = 0; j <allPlayers; j++){
                 if(index[i] < playersArray[j].score){
                     index[i] = playersArray[j].score;
                 }
              }
          }
          for(i = 0; i <allPlayers; i++){
              System.out.print(playersArray[index[i]].name);
              System.out.print(playersArray[index[i]].score);
          }
    }
}
class Player {
    int score;    // players score 
    String name;  // players name
}

2 个答案:

答案 0 :(得分:2)

初始化引用类型数组时:

Player[]  playersArray = new Player[allPlayers];

数组的所有元素都初始化为null

您忘记初始化playersArray[i]

添加

playersArray[i] = new Player();

playersArray[i].name = ...

答案 1 :(得分:0)

您正在声明它但未将内存分配给对象,这就是为什么要获得NULL Pointer异常的原因。在分配值之前,创建对象。

for(i = 0; i <allPlayers; i++){
            playersArray[i] = new Player();