2014-01-05 29 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]; 

方法局部變量對您的類屬性沒有影響,因此您的類屬性始終爲空。