Question: SNode.java package kindergarten; /** * This class represents a student node, with a student * object representing the student, and a next pointer * for

SNode.java

package kindergarten;

/**

* This class represents a student node, with a student

* object representing the student, and a next pointer

* for the student next in line.

*

* @author Ethan Chou

*/

public class SNode {

private Student student; // the data part of the node

private SNode next; // a link to the next student int the linked list

public SNode ( Student s, SNode n ) {

student = s;

next = n;

}

public SNode() {

this(null, null);

}

public Student getStudent () { return student; }

public void setStudent (Student s) { student = s; }

public SNode getNext () { return next; }

public void setNext (SNode n) { next = n; }

}

Student.java

package kindergarten;

/**

* This class represents a student, with a string variable for the

* student's name and an int variable for the student's height.

*

* @author Ethan Chou

*/

public class Student {

private String firstName;

private String lastName;

private int height;

/*

* Constructor

*/

public Student ( String f, String l, int h ) {

firstName = f;

lastName = l;

height = h;

}

/*

* Default constructor sets student's height to 0 (zero)

*/

public Student () {

this(null, null, 0);

}

/**

* Compares the names of this student to paremeter student,

* returning an int value representing which name comes in first alphabetically.

*

* @param other the student being compared

*

* @return an int value of which name comes first alphabetically

* n

* n > 0 means parameter student's name comes before this student

*/

public int compareNameTo ( Student other ) {

int lastNameCompare = this.lastName.compareToIgnoreCase(other.getLastName());

if ( lastNameCompare == 0 ) {

// same last name, compare first names

return this.firstName.compareToIgnoreCase(other.getFirstName());

}

return lastNameCompare;

}

/*

* Prints the student object

*/

public String print () {

String printName = "";

printName += this.firstName.charAt(0) + ". ";

if ( lastName.length() > 4 ) {

printName += this.lastName.substring(0, 4);

} else {

printName += lastName;

}

return printName;

}

/* Getter and setter methods */

public String getFirstName () { return firstName; }

public void setFirstName ( String f ) { firstName = f; }

public String getLastName () { return lastName; }

public void setLastName ( String l ) { lastName = l; }

public int getHeight () { return height; }

public void setHeight ( int h ) { height = h; }

public String getFullName () { return this.firstName + " " + this.lastName;}

}

Classroom.java: Methods to be updated!

package kindergarten;

/**

* This class represents a Classroom, with:

* - an SNode instance variable for students in line,

* - an SNode instance variable for musical chairs, pointing to the last student in the list,

* - a boolean array for seating availability (eg. can a student sit in a given seat), and

* - a Student array parallel to seatingAvailability to show students filed into seats

* --- (more formally, seatingAvailability[i][j] also refers to the same seat in studentsSitting[i][j])

*

* @author Ethan Chou

* @author Kal Pandit

* @author Maksims Kurjanovics Kravcenko

*/

public class Classroom {

private SNode studentsInLine; // when students are in line: references the FIRST student in the LL

private SNode musicalChairs; // when students are in musical chairs: references the LAST student in the CLL

private boolean[][] seatingLocation; // represents the classroom seats that are available to students

private Student[][] studentsSitting; // when students are sitting in the classroom: contains the students

/**

* Constructor for classrooms. Do not edit.

* @param l passes in students in line

* @param m passes in musical chairs

* @param a passes in availability

* @param s passes in students sitting

*/

public Classroom ( SNode l, SNode m, boolean[][] a, Student[][] s ) {

studentsInLine = l;

musicalChairs = m;

seatingLocation = a;

studentsSitting = s;

}

/**

* Default constructor starts an empty classroom. Do not edit.

*/

public Classroom() {

this(null, null, null, null);

}

/**

* This method simulates students standing in line and coming into the classroom (not leaving the line).

*

* It does this by reading students from input file and inserting these students studentsInLine singly linked list.

*

* 1. Open the file using StdIn.setFile(filename);

*

* 2. For each line of the input file:

* 1. read a student from the file

* 2. make an object of type Student with the student information

* 3. insert the Student object at the FRONT of the linked list

*

* Input file has:

* 1) one line containing an integer representing the number of students in the file, say x

* 2) x lines containing one student per line. Each line has the following student

* information separated by spaces: FirstName LastName Height

*

* To read a string using StdIn use StdIn.readString()

*

* The input file has Students in REVERSE alphabetical order. So, at the end of this

* method all students are in line in alphabetical order.

*

* DO NOT implement a sorting method, PRACTICE add to front.

*

* @param filename the student information input file

*/

public void enterClassroom ( String filename ) {

//CODE HERE

}

}

/**

*

* This method creates and initializes the seatingAvailability (2D array) of

* available seats inside the classroom. Imagine that unavailable seats are broken and cannot be used.

*

* 1. Open the file using StdIn.setFile(seatingChart);

*

* 2. You will read the seating chart input file with the format:

* An integer representing the number of rows in the classroom, say r

* An integer representing the number of columns in the classroom, say c

* Number of r lines, each containing c true or false values (true represents that a

* seat is present in that column)

*

* 3. Initialize seatingLocation and studentsSitting arrays with r rows and c columns

*

* 4. Update seatingLocation with the boolean values read from the input file

*

* This method does not seat students on the seats.

*

* @param seatingChart the seating chart input file

*/

public void setupSeats(String seatingChart) {

// CODE HERE

}

/**

*

* This method simulates students standing inline and then taking their seats in the classroom.

*

* 1. Starting from the front of the studentsInLine singly linked list

* 2. Remove one student at a time from the list and insert the student into studentsSitting according to

* seatingLocations

*

* studentsInLine will then be empty

*

* If the students just played musical chairs, the winner of musical chairs is seated separately

* by seatMusicalChairsWinner().

*/

public void seatStudents () {

// CODE HERE

}

/**

* Traverses studentsSitting row-wise (starting at row 0) removing a seated

* student and adding that student to the end of the musicalChairs list.

*

* row-wise: starts at index [0][0] traverses the entire first row and then moves

* into second row.

*/

public void insertMusicalChairs () {

// CODE HERE

}

/**

*

* Removes a random student from the musicalChairs.

*

* @param size represents the number of students currently sitting in musicalChairs

*

* 1. Select a random student to be removed from the musicalChairs CLL.

* 2. Searches for the selected student, deletes that student from musicalChairs

* 3. Calls insertByHeight to insert the deleted student into studentsInLine list.

*

* Requires the use of StdRandom.uniform(int b) to select a random student to remove,

* where b is the number of students currently sitting in the musicalChairs.

*

* The random value denotes the refers to the position of the student to be removed

* in the musicalChairs. 0 is the first student

*/

public void moveStudentFromChairsToLine(int size) {

// CODE HERE

}

/**

* Inserts a single student, eliminated from musical chairs, to the studentsInLine list.

* The student is inserted in ascending order by height (shortest to tallest).

*

* @param studentToInsert the student eliminated from chairs to be inserted into studentsInLine

*/

public void insertByHeight(Student studentToInsert) {

// CODE HERE

}

/**

*

* Removes eliminated students from the musicalChairs and inserts those students

* back in studentsInLine in ascending height order (shortest to tallest).

*

* At the end of this method, all students will be in studentsInLine besides

* the winner, who will be in musicalChairs alone.

*

* 1. Find the number of students currently on musicalChairs

* 2. While there are more than 1 student in musicalChairs, call moveRandomStudentFromChairsToLine()

*/

public void eliminateLosingStudents() {

// CODE HERE

}

/*

* If musicalChairs (circular linked list) contains ONLY ONE student (the winner),

* this method removes the winner from musicalChairs and inserts that student

* into the first available seat in studentsSitting. musicChairs will then be empty.

*

* This only happens when the musical chairs was just played.

*

* This methods does nothing if there is more than one student in musicalChairs

* or if musicalChairs is empty.

*/

public void seatMusicalChairsWinner () {

// CODE HERE

}

/**

*

* This method represents the game of musical chairs!

*

* This method calls previously written methods to repeatedly remove students from

* the musicalChairs until there is only one student (the winner), seats the winner

* and seat the students from the studentsInline.

*

* *****DO NOT****** UPDATE THIS METHOD

*/

public void playMusicalChairs() {

/* DO NOT UPDATE THIS METHOD */

eliminateLosingStudents();

seatMusicalChairsWinner();

seatStudents();

}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!