2014-01-05 90 views
0

我的意图是用不同的方法在对象中用数字和字符串填充不同的数组。为什么我得到空阵列?

但似乎我有一个问题。

下面是代码:

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]+"."); 



    } 
} 

编译器给我一个​​因为在该方法中ausgabe()阵列notenanArray未填充有被用于在该方法eingabe()阵列notenArray创建的值。

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

回答

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

澄清:第二个声明(在'eingabe'范围内)“覆盖”了全局声明 - 最终得到一个局部变量,其范围仅限于其创建的函数。 – Floris

+0

ARRRGHHH!什么是fuc ....错误!!!!!!谢谢 :-))) – user3133542

1

您遮蔽您NotenManagereingabe方法的局部变量声明属性:

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

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