2016-10-22 97 views
0

我是一名学生,正在寻找帮助完成作业。这是任务:创建一个CollegeCourse类。该课程包含课程编号(例如“CIS 210”),学分(例如3)和字母等级(例如“A”)等字段。Java将类数组传入数组

包括每个字段的get()和set()方法。创建一个包含一个ID号的学生类和一个由五个CollegeCourse对象组成的数组。为学号ID创建一个get()和set()方法。还要创建一个返回学生的CollegeCourses之一的get()方法;该方法接受一个整数参数并返回该位置的CollegeCourse(0到4)。接下来,创建一个set()方法来设置一个Student's CollegeCourses的值;该方法需要两个参数 - 一个CollegeCourse和一个表示CollegeCourse的位置的整数(0到4)。

我得到了第二个for循环的运行时错误,我试图将数据放入课程数组中。它要求同一行中的CourseID和小时数,并且不管我对它做出什么响应,我收到一个错误,它几乎看起来像试图在同一时间获取所有数组变量。这是我的代码,其中包括三个类。任何帮助我向正确的方向发送我的赞赏,因为我已经花了很长时间已经研究解决。

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

input.nextInt()后,您需要添加一个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

我按照建议修改了我的代码,并且接受输入。在第二个循环中添加课程,输入课程ID后,它将停止并且不会显示下一行,直到您按Enter键。我也希望它能够将学生列为1,2 ......但它显示的是01,11等,对于学生和课程编号是01,11,21等,学生的输出是可以的,但是课程的输出结果如下:学生#1CollegeCourse @ 55f96302 CollegeCourse @ 55f96302 – cccstudent

+0

我已经包含了我的主要类的完整代码 –

+0

糟糕,我在第二个块中留下了'System.out.println();'将更正它 –