2017-08-29 14 views
-3

私はjavaの本を手に入れ、Arraysに関するいくつかの練習をしています。なぜこれが範囲外であるのか理解できる人はいませんか? 練習は3つのクラスを作成することです:CollegeCourse;主な方法で学生とInputGrades。私はそれを実行すると、配列が範囲外であることを示すまでうまく行く。私が第3の生徒のために第2のコースに入ろうとしているときにクラッシュする。ArrayOutOfBoundsエラーが発生するのはなぜですか?

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); 
     } 
    } 
} 

私の出力は次のようになります。補正は次のようになりますとなるよう、

courses[i].setLetterGrade(infoChar); 

カウンターではなくjiです:

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

学生とCollegeCourseの定義は –

+1

@MaheshKshirsagarを与えなければなりません。私はそれらを与えなければならないと思います。これらのクラスのメソッドが何をしているのか想像することができます。質問に不必要な長さを追加するだけです – ParkerHalo

答えて

2

あなたは、コードの最後の行に問題がある

courses[j].setLetterGrade(infoChar); 

お手伝い願います!

+0

ありがとうございました。私はそれを逃したとは信じられません。 –

3

あなたの最後の行は、あなたがインデックスj
とコースを反復している

courses[i].setLetterGrade(infoChar); 

courses[j].setLetterGrade(infoChar); 

にラインを変更することも

+0

ありがとうございます。私はそれを逃したとは信じられません。 –

+0

@KleytonSoaresがうれしい – ParkerHalo

関連する問題