【问题标题】:Why am I getting empty arrays?为什么我得到空数组?
【发布时间】:2014-01-22 16:26:04
【问题描述】:

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

但是我好像有问题。

代码如下:

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,因为ausgabe() 方法中的数组notenanArray 没有用eingabe() 方法中为数组notenArray 创建的值填充。

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

【问题讨论】:

    标签: java arrays variables methods instance


    【解决方案1】:

    您要声明notenArrayvornamennachnamen 两次(一次作为类属性,一次在方法eingabe 中本地)。通过这样做,您将向本地数组输入值,因此当您尝试打印方法ausgabeDesArrays() 中的第一个元素时,它会抛出异常,因为“全局”notenArray 不是初始化。

    要更正问题,请更改以下行:

    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];
    

    【讨论】:

    • 澄清一下:第二个声明(在eingabe 的范围内)“覆盖”了全局声明——你最终得到一个局部变量,其范围仅限于创建它的函数。
    【解决方案2】:

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

    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];
    

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

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 2012-03-12
      • 2018-10-10
      • 1970-01-01
      • 1970-01-01
      • 2021-07-03
      • 2016-11-22
      相关资源
      最近更新 更多