为什么我得到空阵列?

时间:2014-01-05 04:36:38

标签: java arrays variables methods instance

我的目的是用对象中不同方法的数字和字符串填充不同的数组。

但似乎我有问题。

以下是代码:

package arrays;

import java.util.Scanner;

public class Notendurchschnitt {

    public static void main(String[] args) {

        NotenManager noten = new NotenManager();
        noten.eingabe();
        noten.ausgabeDesArrays();
    }

}

class NotenManager {

Scanner scanner = new Scanner(System.in);
double[] notenArray;
String[] vornamen;
String[] nachnamen;


void eingabe() {

    System.out.print("Wieviele Personen haben\nan der Kausur teilgenommen? ");
    double[] notenArray=new double[scanner.nextInt()];
    String[] vornamen=new String[notenArray.length];
    String[] nachnamen=new String[notenArray.length];
    scanner.nextLine();

    for (int i=0;i<notenArray.length;i++) {
        System.out.printf("%d.Teilnehmer\nVorname: ",i+1);
        vornamen[i]=scanner.nextLine();
         System.out.print("Nachname: ");
         nachnamen[i]=scanner.nextLine();
         System.out.print("Note: ");
         scanner.nextLine();

    }



}

 void ausgabeDesArrays() {


     double ergebnis=0;


        System.out.println("Zahl der Eintraege:."+notenArray[0]+".");



    }
}

编译器给了我一个NullPointerException-Error,因为方法notenanArray中的数组ausgabe()没有填充为方法{中的数组notenArray创建的值{1}}。

为什么数组中填充了空值,即使它是一个实例变量?

2 个答案:

答案 0 :(得分:1)

您声明notenArrayvornamennachnamen两次(一个作为类属性,另一个在方法eingabe中)。通过执行此操作,您将输入值本地数组,因此当您尝试打印方法ausgabeDesArrays()中的第一个元素时,它会抛出一个异常,因为“全局”{{1没有初始化。

要纠正问题,请更改这些行:

notenArray

double[] notenArray = new double[scanner.nextInt()];
String[] vornamen = new String[notenArray.length];
String[] nachnamen = new String[notenArray.length];

答案 1 :(得分:1)

您使用NotenManager方法局部变量声明来隐藏eingabe类属性:

double[] notenArray = new double[scanner.nextInt()];
String[] vornamen = new String[notenArray.length];
String[] nachnamen = new String[notenArray.length];

你不需要重新演绎它们只是初学者:

notenArray = new double[scanner.nextInt()];
vornamen = new String[notenArray.length];
nachnamen = new String[notenArray.length];

方法局部变量对您的类属性没有影响,因此您的类属性始终为null。