2015-11-25 32 views
0

爲什麼數組值不能保存在我的開關功能中? 首先我按1,創建我的花名冊值。在創建值之後,我按2它會導致ArrayOutOfBound錯誤。誰能告訴我我做錯了什麼?爲什麼在開關情況下數組值不能傳遞?

請忽略FileNotFoundExceptions。在我解決我做錯了什麼之後,需要在那部分工作。

public static Scanner keyboard = new Scanner(System.in); 
public static int numStudents; 
public static String[] nameOfStudent; 
public static int[] broncoID; 
public static int[] grade; 

^這些都是我聲明的變量

public static void main(String[] args) throws FileNotFoundException { 

    startMenus(keyboard); 
} 

public static void startMenus(Scanner sc) throws FileNotFoundException { 
    while (true) { 
     System.out.println("(Enter option # and press ENTER)\n"); 
     System.out.println("1. Create new Roster"); 
     System.out.println("2. Display Current Roster"); 

     int option = sc.nextInt(); 

     sc.nextLine(); 

     switch (option) { 
     case 1: 
      createRoster(); 
      break; 
     case 2: 
      displayRoster(); 
      break; 
     default: 
      System.out.println("Unrecognized Option!\n"); 
     } 
    } 
} 

public static void createRoster() throws FileNotFoundException { 

    System.out.println("Please list how many students there are."); 

    numStudents = keyboard.nextInt(); 

    nameOfStudent = new String[numStudents]; 
    broncoID = new int[numStudents]; 
    grade = new int[numStudents]; 

    keyboard.nextLine(); 

    for(int i = 0; i < numStudents; i++){ 
     System.out.println("Please enter full name of Student."); 
     nameOfStudent[i] = keyboard.nextLine(); 
     System.out.println("Now please enter the BroncoID of Student."); 
     broncoID[i] = keyboard.nextInt(); 
     System.out.println("Now please enter grade of Student (0-100)"); 
     grade[i] = keyboard.nextInt(); 
     keyboard.nextLine(); 
    } 
    System.out.println("Roster successfully created!"); 
    for (int i = 0; i < numStudents ; i++){ 
     System.out.printf("Name: %9s\t Bronco ID: %5d \t Grade: %2d \n", nameOfStudent[i], broncoID[i], grade[i]); 
    } 
} 

public static void displayRoster(){ 
    System.out.printf("Name: %9s\t Bronco ID: %5d \t Grade: %2d \n", nameOfStudent[1], broncoID[1], grade[1]); 

}

在第一種情況下printf的工作,但它不會在第二種情況下工作。錯誤我得到:

您使用2例switch語句
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 
at Roster.displayRoster(Roster.java:115) 
at Roster.startMenus(Roster.java:36) 
at Roster.main(Roster.java:16) 
+0

在哪條線上出現錯誤? – proudandhonour

+0

爲什麼你的開關盒裏沒有'case 4'? –

+0

在你的代碼中,你在nameOfStudent,broncoID和grade數組中添加記錄在位置0,因爲數組從0開始,而在displayRoster方法中,你從數組的1個位置檢索,所以它引起異常。 – proudandhonour

回答

0

情況1和2

但是,你正在做輸入爲1 createroster和4 displayroster

在switch語句中使用「case 1」和「case 4」。 或使用:

System.out.println("1. Create new Roster"); 
System.out.println("2. Display Current Roster"); 
+0

錯誤我忘了解決這個問題,案件號碼是正確的,但問題仍然存在 –

+0

錯誤即將在displayroster中,你可以分享該代碼嗎? –

+0

抱歉,忘記編輯。共享。 –

4

的數組總是以索引0開始你加一個「花名冊」你的陣列。這個名單將得到索引0.在你想要顯示索引1的displayRoster()方法中,但你的數組只有索引0.所以它會得到ArrayIndexOutOfBoundsException。

相反的:

System.out.printf("Name: %9s\t Bronco ID: %5d \t Grade: %2d \n", nameOfStudent[1], broncoID[1], grade[1]); 

嘗試:

System.out.printf("Name: %9s\t Bronco ID: %5d \t Grade: %2d \n", nameOfStudent[0], broncoID[0], grade[0]); 
+0

這一定是答案。 –

0
  1. 更好的修改方法displayRoster爲:

    public static void displayRoster() { 
        System.out.println("Enter the record number to be displayed[1 to numStudents :"); 
        int i = keyboard.nextInt(); 
        if(i <= nameOfStudent.length) 
         System.out.printf("Name: %9s\t Bronco ID: %5d \t Grade: %2d \n", nameOfStudent[i-1], broncoID[i-1], grade[i-1]); 
        else 
         System.out.println("This is where you are trying to access element out of bound."); 
    } 
    
  2. 輸入option = 4引導到default在您的代碼中應該切換的開關盒「Unrecognized Option!"

相關問題