Top
Previous Next
Java Arrays, Objects, Methods CS 161 - Java

Saving Multiple Student Objects

Also demonstrates one class using instances of another
Source: examples/CSClass.java



/** A class that will make use of another class.
**/
public class CSClass {
 
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("usage java CSClass [student names]");
}
else {
int numberOfStudents = args.length;
CSClass cs161 = new CSClass( numberOfStudents );
cs161.enroll( args );
cs161.assignLabPartners();
cs161.listRoster();
}
}
 
// Instance fields
CSStudent students[] = null;
int last = 0;
 
public CSClass( int number ) {
students = new CSStudent[ number ];
}
 
public void enroll(String[] names) {
int numberOfStudents = names.length;
int id = 0;
 
for (int arg = 0; arg < numberOfStudents; arg++) {
 
String name = names[arg];
 
id++; // assign next id
String idString = String.valueOf(id); // as a String
 
CSStudent aStudent = new CSStudent( name, idString);
 
aStudent.setGrade(100);
 
// save the reference to the current student in the next array slot
students[last] = aStudent;
last++;
}
}
 
public void assignLabPartners() {
 
// Assign every other pair of students as lab partners
int next = 0;
int pairs = last / 2;
while (pairs > 0) {
students[next].setLabPartner( students[next+1] );
students[next+1].setLabPartner( students[next] );
next += 2;
pairs--;
}
 
// If there were an odd number of students in the array the
// last one won't have a lab partner.
}
 
public void listRoster() {
for (int i = last - 1; i >= 0; i--) {
// Ask each Student to identify itself, last to first
System.out.println(students[i]);
}
}
}

And the complete CSStudent.java that's been used in preceding examples
Source: examples/CSStudent.java



/** Encapsulate information relating to a single student.
** @author: Jonathan Doughty
**/
 
public class CSStudent {
 
// Instance variables (fields) that will be associated with
// each student
 
private String GMU_Id;
private String name;
private int homeworkGrade;
private CSStudent labPartner;
 
// Constructors for the class
 
private CSStudent() { // why do you think this is?
}
 
public CSStudent( String name, String id) {
this.name = name;
GMU_Id = id;
}
 
// An accessor method to set the Student's name field; not
// needed any more but left in because a student's name could
// change.
public void setName( String studentName ) {
name = studentName;
}
 
// An accessor method to return this Student's name
public String getName() {
return name;
}
 
// An accessor method to set the Student's GMU_Id field (probably
// no longer necessary)
public void setId( String id ) {
GMU_Id = id;
}
 
// An accessor method to set the Student's homeworkGrade field
public void setGrade( int grade ) {
homeworkGrade = grade;
}
 
// An accessor method to assign this Student's lab partner
public void setLabPartner( CSStudent s ) {
labPartner = s;
}
 
// Using the toString method to enable an instance of an
// object to identify itself usefully.
public String toString() {
 
// Since I'm going to be returning a String made up of various
// pieces, I build up those pieces in a StringBuffer.
 
StringBuffer sb = new StringBuffer();
sb.append(name);
sb.append(" Id# ");
sb.append(GMU_Id);
if (labPartner != null) {
// Notice I don't just use labPartner.toString(). If I did
// I would create an infinite loop: each lab partner calls
// its lab partner's toString() which calls's its lab
// partner's toString() ... Instead, I just get and append
// the lab partner's name.
sb.append(" lab partner=");
sb.append( labPartner.getName());
}
return sb.toString();
}
}


Top
Previous Next
jwd