Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

I was wondering if I could get some help with the assignall method. All the other classes pass their tests and I believe most of

I was wondering if I could get some help with the assignall method. All the other classes pass their tests and I believe most of the code in the scheduler class is correct. I'm just not too sure how to implement that one method.

Student.java

package scheduler;

import java.util.ArrayList; import java.util.List;

/** * A class representing a student. * * @author liberato * */ public class Student { /** * * Instantiates a new Student object. The student's maximum course load must be greater * than zero, and the preferences list must contain at least one course. * * The preference list is copied into this Student object. * * @param name the student's name * @param maxCourses the maximum number of courses that can be on this student's schedule * @param preferences the student's ordered list of preferred courses * @throws IllegalArgumentException thrown if the maxCourses or preferences are invalid */ private String name; private int maxCourses; private List preferences; private List schedule; public Student(String name, int maxCourses, List preferences) throws IllegalArgumentException { this.name = name; this.maxCourses = maxCourses; this.preferences = preferences; if(maxCourses == 0) { throw new IllegalArgumentException("Max courses has to be greater than zero"); } if(preferences != null && preferences.isEmpty()) { throw new IllegalArgumentException("The preferences list must have at least one course"); } } /** * * @return the student's name */ public String getName() { return name; } /** * * @return the student's max course load */ public int getMaxCourses() { return maxCourses; } /** * Returns the student's list of course preferences, ordered from most- to least-desired. * * This returned object does not share state with the internal state of the Student. * * @return the student's preference list */ public List getPreferences() { return preferences; } /** * Returns the student's current schedule. * * This returned object does not share state with the internal state of the Student. * * @return the student's schedule */ public List getSchedule() { schedule = new ArrayList<>(); return schedule; } }

Course.java

package scheduler;

import java.util.ArrayList; import java.util.List;

/** * A class representing a Course. * * @author liberato * */ public class Course { /** * Instantiates a new Course object. The course number must be non-empty, and the * capacity must be greater than zero. * @param courseNumber a course number, like "COMPSCI190D" * @param capacity the maximum number of students that can be in the class * @throws IllegalArgumentException thrown if the courseNumber or capacity are invalid */ private String courseNumber; private int capacity; private ListRoster; public Course(String courseNumber, int capacity) throws IllegalArgumentException { this.courseNumber = courseNumber; this.capacity = capacity; Roster = new ArrayList<>(); if(courseNumber.isEmpty()) { throw new IllegalArgumentException("The course number can't be empty"); } else if(capacity <= 0) { throw new IllegalArgumentException("The course cannot be empty"); } } /** * * @return the capacity of the course */ public int getCapacity() { return capacity; } /** * * @return the course number */ public String getCourseNumber() { return courseNumber; }

/** * Returns the list of students enrolled in the course. * * This returned object does not share state with the internal state of the Course. * * @return the list of students currently in the course */ public List getRoster() { return Roster; } }

Scheduler.java

package scheduler;

import java.util.ArrayList; import java.util.List;

public class Scheduler { /** * Instantiates a new, empty scheduler. */ private List classes; private Liststudents; public Scheduler() { classes = new ArrayList<>(); students = new ArrayList<>(); } /** * Adds a course to the scheduler. * * @param course the course to be added */ public void addCourse(Course course) { classes.add(course); } /** * Returns the list of courses that this scheduler knows about. * * This returned object does not share state with the internal state of the Scheduler. * * @return the list of courses */ public List getCourses() { List newCourses = new ArrayList<>(); for(int i = 0; i < classes.size(); i++) { newCourses.add(classes.get(i)); } return newCourses; } /** * Adds a student to the scheduler. * * @param student the student to add */ public void addStudent(Student student) { students.add(student); } /** * Returns a list of the students this scheduler knows about. * * This returned object does not share state with the internal state of the Scheduler. * @return */ public List getStudents() { List newStudents = new ArrayList<>(); for(int i = 0; i < students.size(); i++) { newStudents.add(students.get(i)); } return newStudents; } /** * Assigns all students to courses in the following manner: * * For a given student, check their list of preferred courses. Add them to the course that: * - exists in the scheduler's list of courses * - the student most prefers (that is, comes first in their preference list) * - the student is not not already enrolled in * - and is not full (in other words, at capacity) * Adds courses to the *end* of the student's current list of classes. Adds students to * the *end* of the course's roster. * * Repeat this process for each student, one-by-one; each student will now have one course, * usually (but not always) their most preferred course. * * Then repeat this whole process (adding one course per student, when possible, proceeding * round-robin among students), until there is nothing left to do: Students might * all be at their maximum number of courses, or there may be no available seats in courses * that students want. */ public void assignAll() { }

/** * Drops a student from a course. * * @param student * @param course * @throws IllegalArgumentException if either the student or the course are not known to this scheduler */ public void drop(Student student, Course course) throws IllegalArgumentException { course.getRoster().remove(student); student.getSchedule().remove(course); if(students.contains(student) == false) { throw new IllegalArgumentException("Student is not in the scheduler"); } if(classes.contains(course) == false) { throw new IllegalArgumentException("This course is not in the scheduler"); } } /** * Drops a student from all of their courses. * * @param student * @throws IllegalArgumentException if the student is not known to this scheduler */ public void unenroll(Student student) throws IllegalArgumentException{ if(students.contains(student) == false) { throw new IllegalArgumentException("Student is not in the scheduler"); } for(int i = 0; i < classes.size(); i++) { classes.remove(classes.get(i)); } } }

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image_2

Step: 3

blur-text-image_3

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

More Books

Students also viewed these Databases questions