2017-08-29 71 views
-3

我有一本java書,正在做一些關於數組的練習。任何人都可以幫助我理解爲什麼這是超越界限?這個練習是創建3個班級:一個CollegeCourse;一個學生和一個InputGrades的主要方法。當我運行它時,它會很好,直到它顯示我的數組超出界限。當我即將進入第三名學生的第二門課程時,它會崩潰。爲什麼我會得到一個數組IndexOutOfBounds錯誤?

public static void main(String[] args) { 
    String info = null; 
    int infoInt = 0; 
    char infoChar = 0; 

    Scanner input = new Scanner(System.in); 

    CollegeCourse[] courses = new CollegeCourse[2]; 
    for(int i = 0; i < courses.length; i++) { 
     courses[i] = new CollegeCourse(); 
    } 

    Student[] students = new Student[3]; 
    for(int i = 0; i < students.length; i++) { 
     students[i] = new Student(); 
    } 
    System.out.println("Welcome to Java Programming.\n Professor, enter your students' info below."); 
    for(int i = 0; i < students.length; i++) { 
     System.out.print("\nEnter student ID >>> "); 
     infoInt = input.nextInt(); 
     input.nextLine(); 
     students[i].setStudentID(infoInt); 

     for(int j = 0; j < courses.length; j++) { 
      System.out.print("Enter course ID >>> "); 
      info = input.nextLine(); 
      courses[j].setCourseID(info); 

      System.out.print("Enter credit hours >>> "); 
      infoInt = input.nextInt(); 
      input.nextLine(); 
      courses[j].setCreditHours(infoInt); 

      System.out.print("Enter letter grade >>> "); 
      info = input.nextLine(); 
      info = info.toUpperCase(); 
      info.toCharArray(); 
      infoChar = info.charAt(0); 
      courses[i].setLetterGrade(infoChar); 
     } 
    } 
} 

我的輸出是:

Welcome to Java Programming. 
    Professor, enter your students' info below. 

Enter student ID >>> 1468 
Enter course ID >>> cis 210 
Enter credit hours >>> 3 
Enter letter grade >>> b 
Enter course ID >>> smm 310 
Enter credit hours >>> 5 
Enter letter grade >>> a 

Enter student ID >>> 1449 
Enter course ID >>> cis 210 
Enter credit hours >>> 5 
Enter letter grade >>> a 
Enter course ID >>> smm 310 
Enter credit hours >>> 5 
Enter letter grade >>> a 

Enter student ID >>> 1986 
Enter course ID >>> cis 210 
Enter credit hours >>> 2 
Enter letter grade >>> c 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 
    at Chapter08Arrays.InputGrades.main(InputGrades.java:48) 
+0

此代碼在運行時拋出一個'InputMismatchException'。 – progyammer

+0

定義班學生和大學課程應給予 –

+1

@MaheshKshirsagar我不認爲應該給他們。你可以想象這些類的方法在做什麼,它只會給問題添加不必要的長度 – ParkerHalo

回答

2

你有問題的代碼最後一行:

courses[i].setLetterGrade(infoChar); 

計數器是i代替j,因此與修正將是:

courses[j].setLetterGrade(infoChar); 

希望它有幫助!

+0

非常感謝。我不能相信我錯過了這一點。 –

3

你的最後一行顯示

courses[i].setLetterGrade(infoChar); 

雖然你通過與指數j
更改線課程以迭代

courses[j].setLetterGrade(infoChar); 

也應該解決您的問題

+0

非常感謝。我不能相信我錯過了這一點。 –

+0

@KleytonSoares很高興我們可以提供幫助 – ParkerHalo

相關問題