2016-10-22 6 views
0

私は学生であり、課題に関するヘルプを探しています。タスクは次のとおりです。CollegeCourseクラスを作成します。クラスには、コースID(「CIS 210」など)、クレジット時間(たとえば3)、および文字グレード(「A」など)のフィールドが含まれています。Javaを渡すクラス配列を配列に

フィールドごとにget()メソッドとset()メソッドをインクルードします。 ID番号と5つのCollegeCourseオブジェクトの配列を含むStudentクラスを作成します。 Student ID番号のget()およびset()メソッドを作成します。また、StudentのCollegeCoursesの1つを返すget()メソッドを作成します。このメソッドは整数引数を取り、その位置にCollegeCourseを返します(0〜4)。次に、Student's CollegeCoursesの1つの値を設定するset()メソッドを作成します。このメソッドは、CollegeCourseとCollegeCourseの位置(0〜4)を表す整数の2つの引数をとります。

私はコース配列にデータを取得しようとしている2番目のforループでランタイムエラーが発生しています。 CourseIDとHoursの両方を同じ行に入力するように求めています。エラーに遭遇しても、エラーは発生していますが、同時にすべての配列変数を取得しようとしているようです。ここに3つのクラスを含む私のコードです。正しい方向に私を送ってくれる人の助けを借りて感謝します。 input.nextInt()

public class CollegeCourse { 

private String courseId; 
private int creditHours; 
private char grade; 
public CollegeCourse(String id, int hours, char grade) 
{ 
    courseId=id; 
    creditHours = hours; 
    this.grade = grade; 
} 

public void setCourseId(String id) 
{ 
    courseId = id;//Assign course id to local variable 
} 

public String getCourseId() 
{ 
    return courseId;//Provide access to course id 
} 

public void setHours(int hours) 
{ 
    creditHours = hours;//Assign course id to local variable 
} 

public int getHours() 
{ 
    return creditHours;//Provide access to course id 
} 

public void setGrade(char grade) 
{ 
    this.grade = grade;//Assign course id to local variable 
} 

public char getGrade() 
{ 
    return grade;//Provide access to course id 
} 
} 

学生クラス

public class Student { 

final int NUM_COURSES = 5; 

private int studentId; 
private CollegeCourse courseAdd;//Declares a course object 
private CollegeCourse[] courses = new CollegeCourse[NUM_COURSES]; 

//constructor using user input 
public Student(int studentId) 
{ 
    this.studentId=studentId; 
} 

public void setStudentId(int id) 
{ 
    studentId = id;//Assign course id to local variable 
} 

public int getStudentId() 
{ 
    return studentId;//Provide access to course id 
} 

public void setCourse(int index, CollegeCourse course) 
{ 
    courses[index] = course; 
} 

public CollegeCourse getCourse(int index) 
{ 
    return courses[index]; 
    //do I need code to return the courseId hours, grade 
}  
} 

InputGradesクラス

import java.util.Scanner; 
public class InputGrades { 

public static void main(String[] args) { 

    final int NUM_STUDENTS = 2; 
    final int NUM_COURSES = 3; 

    Student[] students = new Student[NUM_STUDENTS]; 
    int s;//subscript to display the students 
    int c;//subscript to display courses 
    int stId; 
    int csIndex; 
    String courseId = ""; 
    int hours = 0; 
    //String gradeInput; 
    char grade = 'z'; 
    CollegeCourse course = new CollegeCourse(courseId,hours, grade);//not sure if I am handling this correctly 

    Scanner input = new Scanner(System.in); 

    for(s = 0; s<NUM_STUDENTS; ++s) 
    { 
     students[s] = new Student(s); 
     System.out.print("Enter ID for student #" + (s+1) + ":"); 
     stId = input.nextInt(); 
     input.nextLine(); 
     students[s].setStudentId(stId); 
     for(c=0; c < NUM_COURSES; ++c) 
     {    
      csIndex=c; 
      System.out.print("Enter course ID #" + (c+1) + ":"); 
      courseId = input.nextLine(); 
      course.setCourseId(courseId); 
      System.out.print("Enter hours:"); 
      hours = input.nextInt(); 
      input.nextLine(); 
      course.setHours(hours); 
      String enteredGrade = ""; 
       while(enteredGrade.length()!=1) { 
        System.out.print("Enter grade:"); 
        enteredGrade = input.nextLine(); 
        if(enteredGrade.length()==1) { 
         grade = enteredGrade.charAt(0); 
        } else { 
         System.out.println("Type only one character!"); 
        } 
       } 
      course.setGrade(grade); 
      students[s].setCourse(csIndex, course);   
     } 
    } 

    for(s = 0; s<NUM_STUDENTS; ++s) 
    { 
     System.out.print("\nStudent# " + 
       students[s].getStudentId()); 
     System.out.println(); 
     for(c=0;c<NUM_COURSES;++c) 
      System.out.print(students[s].getCourse(c) + " "); 
     System.out.println(); 
    } 
} 

} 
+0

あなたのエラーが何であるか、この質問を参照してください? – xro7

+0

どのような例外がスローされますか? –

+0

エラーの完全なStactraceを投稿して、それが起こっている行を示すことができますか?それは多くの助けになります – Gumbo

答えて

0

あなたは1 input.nextLine();より多くのあなたがグレードを読むことができるよりを追加する必要があります。

  System.out.print("Enter hours:"); 
      hours = input.nextInt(); 
      input.nextLine(); 
      course.setHours(hours); 

なぜ必要なのですか? Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo() methods

あなたが入力グレードあなたは非常に単純な長さの検証を追加する必要があります:

  String enteredGrade = ""; 
      while(enteredGrade.length()!=1) { 
       System.out.print("Enter grade:"); 
       enteredGrade = input.nextLine(); 
       if(enteredGrade.length()==1) { 
        grade = enteredGrade.charAt(0); 
       } else { 
        System.out.println("Type only one character!"); 
       } 
      } 

ので、フルメインクラスコード:

import java.util.Scanner; 

/** 
* Created by dkis on 2016.10.22.. 
*/ 
public class App { 
    public static void main(String[] args) { 

     final int NUM_STUDENTS = 10; 
     final int NUM_COURSES = 5; 

     Student[] students = new Student[NUM_STUDENTS]; 
     //String name; 
     int s;//subscript to display the students 
     int c;//subscript to display courses 
     int stId; 
     int csIndex; 
     String courseId = ""; 
     int hours = 0; 
     char grade = 'z'; 
     CollegeCourse course = new CollegeCourse(courseId,hours, grade);//not sure if I am handling this correctly 

     Scanner input = new Scanner(System.in); 

     for(s = 0; s<NUM_STUDENTS; ++s) 
     { 
      students[s] = new Student(s); 
      System.out.print("Enter ID for student #" + s+1 + ":"); 
      stId = input.nextInt(); 
      input.nextLine(); 
      students[s].setStudentId(stId); 
      for(c=0; c < NUM_COURSES; ++c) 
      { 
       //CollegeCourse course = students[s].getCourse(c); 
       csIndex=c; 
       System.out.print("Enter course ID#" + c+1 + ":"); 
       courseId = input.nextLine(); 
       course.setCourseId(courseId); 
       System.out.print("Enter hours:"); 
       hours = input.nextInt(); 
       input.nextLine(); 
       course.setHours(hours); 

       String enteredGrade = ""; 
       while(enteredGrade.length()!=1) { 
        System.out.print("Enter grade:"); 
        enteredGrade = input.nextLine(); 
        if(enteredGrade.length()==1) { 
         grade = enteredGrade.charAt(0); 
        } else { 
         System.out.println("Type only one character!"); 
        } 
       } 
       course.setGrade(grade); 
       students[s].setCourse(csIndex, course); 
      } 
     } 

     for(s = 0; s<NUM_STUDENTS; ++s) 
     { 
      System.out.print("\nStudent# " + 
        students[s].getStudentId()); 
      for(c=0;c<NUM_COURSES;++c) 
       System.out.print(students[s].getCourse(c) + " "); 
      System.out.println(); 
     } 
    } 
} 
+0

上記のコードを上記のように変更し、入力を受け入れるようにしています。コースに追加する2番目のループでは、コースIDを入力すると停止し、Enterキーを押すまで次の行が表示されません。私はまた、生徒数を1,2と数えたいと思っていましたが、01、11などを表示しています。生徒は#01、11、21などです。生徒の出力は大丈夫です学生クラス1教室コース@ 55f96302カレッジコース@ 55f96302 – cccstudent

+0

メインクラスのフルコードを含めました –

+0

私は2番目のブロックに 'System.out.println();'を残しました。それを修正します –