Java passant un tableau de classe dans un tableau


Je suis étudiant et je cherche de l'aide pour un devoir. Voici la tâche: Créer une classe CollegeCourse. La classe contient des champs pour l'ID de cours (par exemple, "CIS 210"), les heures de crédit (par exemple, 3), et une note de lettre (par exemple, "A").

Include get() et set()méthodes pour chaque champ. Créez une classe d'étudiant contenant un numéro d'identification et un tableau de cinq objets CollegeCourse. Créez une méthode get () et set () pour le numéro d'identification de l'étudiant. Créez également une méthode get () qui renvoie l'un des CollegeCourses de l'étudiant; la méthode prend un argument entier et renvoie le CollegeCourse dans cette position (0 à 4). Ensuite, créez une méthode set () qui définit la valeur de l'un des CollegeCourses de l'étudiant; la méthode prend deux arguments-un CollegeCourse et un entier représentant la position du CollegeCourse (0 à 4).

Je reçois des erreurs d'exécution sur la seconde boucle for où j'essaie d'obtenir les données dans le tableau de cours. Il demande à la fois le CourseID et Hours dans la même ligne et peu importe ce que je réponds avec, je reçois une erreur, il semble presque qu'il essaie d'obtenir toutes les variables des tableaux en même temps. Voici mon code qui comprend trois classes. Toute aide pour m'envoyer dans la bonne direction est appréciée car j'ai déjà passé une tonne de temps à faire des recherches pour résoudre.

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

Classe d'étudiant

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

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

}
Author: cccstudent, 2016-10-22

1 answers

Après input.nextInt(), vous devez ajouter un input.nextLine(); de plus et vous pouvez lire la note.

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

Pourquoi est-ce nécessaire? Voir cette question: Scanner ignore nextLine () après avoir utilisé next (), nextInt() ou d'autres méthodes nextFoo ()

Vous devez ajouter une validation de longueur très simple lorsque vous entrez la note:

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

Donc le code de classe principal complet:

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
Author: Dániel Kis, 2017-05-23 11:48:35