2015-09-28 58 views
1

我正在嘗試爲我的程序創建一個交互式菜單,用於處理對象數組(「學生」)。問題是在我的第二個開關函數,情況1.它不斷給我一個錯誤,myArray尚未初始化。我在我的主要方法中首先聲明瞭myArray,並認爲在我的第一個開關中初始化它將初始化myArray的所有情況。 (注意,我的第一個開關案例「是」和案例「否」沒有問題。) 對我來說,我似乎無法訪問while循環之外的初始化數組。有沒有解決的辦法?無法訪問循環內初始化的數組

public static void main(String[] args) { 

    Student[] myArray; 

    System.out.println("Welcome."); 
     //stuff 
     System.out.println("Please type \"Yes\" or \"No\"."); 
     switch (keyboard.next()) { 

     case "Yes": 
      String filename = myFile; 
      myArray = readListFromFile(filename); //sends to setters in class Student 
      //more stuff 
      break; 

     case "No": 
      myArray = readList(); //allows for manual input then sends to setters 
      //stuff 
      break; 

     default: 
      System.out.println("Unrecognized option."); 

     } 

    // add a new switch 
    switch(keyboard.nextInt()) { 

     case 1: 
      averageScore(myArray); //The local variable myArray may not have been initialized 

     } 
    } 

在此先感謝。

+1

它說這是因爲它有可能是你的while循環從未被執行。因此添加一個默認初始化。 – CoderNeji

+0

在while循環之前添加一個默認初始化。 – Stultuske

+0

編譯器在讀取它之前需要知道變量是否已初始化。每個執行路徑都需要初始化變量。確保這一點的最簡單方法是在聲明它時指定它。 – khelwood

回答

1

有兩種選擇。無論是在年初宣佈的數組:

Student[] myArray = null; 

或switch語句,在默認情況下:

myArray = null; 

或init爲空數組以避免空指針。

+0

謝謝。我制定了我也可以使用 '學生[] myArray = {};'' – kezchino

0

如果輸入不是「是」或「否」,則只會通過默認值。然後你的數組沒有初始化。

Student[] myArray = null; 
在聲明

myArray = null 
在你的交換機會解決這個問題的默認部分