-1

我做错了什么?我认为这是数组的原因。行号现在不正确,因为我不得不稍微缩短我的文字,对此感到抱歉。

Exception in thread "main" java.lang.NullPointerException
    at Team.<init>(Team.java:43)
    at Team.main(Team.java:30)

代码:

public static void main(String[] args) 
{
    System.out.println("Dein Fußballteam in der ersten Bundesliga!");

    int[] Spieler = new int[20];
    int Torschützen[] = new int[10];  

    Team myTeam = new Team();
    myTeam.einfacheNachricht();
}

public Team() 
{
    TeamSpieler = new Spieler[20];
    Scanner team = new Scanner(System.in);
    for (int i=0; i<20;i++){
        System.out.println("Bitte geben Sie den Namen des Spielers " + i + " ein: ");
        TeamSpieler[i].Name = team.nextLine();
        System.out.println("Bitte geben Sie das Alter des Spielers " + i + " ein: ");
        TeamSpieler[i].Alter = team.nextInt();
        System.out.println("Bitte geben Sie die Tore des Spielers " + i + " ein: ");
        TeamSpieler[i].Tore = team.nextInt();
    }
    System.out.println("Bitte geben Sie den Namen ihres Teams ein: ");
    Teamname = team.nextLine();
              team.close();
}
4

4 回答 4

5

这一行:

TeamSpieler = new Spieler[20];

不创建20new Spielers,它只创建20 Spieler引用,初始化为null.

为了避免NullPointerExceptions,你需要做

TeamSpieler[i] = new Spieler();

对于每个i.

另外,请遵循Java编码标准,变量名应以小写字母开头。

于 2013-04-17T14:45:59.517 回答
1

TeamSpieler拥有一个包含 20 个变量的数组,每个变量都可以指向一个Spieler对象——但它们都没有。相反,变量是 all null,这就是导致您的异常的原因。在循环的顶部,您for需要添加,例如,

TeamSpieler[i] = new Spieler();
于 2013-04-17T14:46:29.547 回答
1

当您创建一个包含 20 个条目的数组时,它将填充 20null个条目。在您可以访问之前Spieler,您首先必须创建它们。

for (int i = 0; i < TeamSpieler.size(); i++) {
    TeamSpieler[i] = new Spieler();
}
于 2013-04-17T14:47:55.163 回答
0

数组的元素需要单独初始化。

在您的代码中:

 TeamSpieler = new Spieler[20];

null用值初始化数组。

TeamSpieler[i].Name = team.nextLine();

访问对象Name的属性null

于 2013-04-17T14:49:10.300 回答