public class
Student implements Comparable
{
public String lastName;
public String firstName;
public int grade;
public String school;
public static int compareMode; //all
students share one static var
public Student()
{
String[]
lastNames = {"Smith", "Do", "Bardot",
"Lu", "Green", "Lowe", "Bacon", "Zoom",
"Gravy", "TwoShoes", "Monroe",
"Hope", "West", "Lopez", "Gray"};
lastName
= lastNames[(int)(Math.random() * lastNames.length)];
String[]
firstNames = {"Jimmy", "June",
"Abbott", "Luna", "Harry", "Moon", "Lea",
"Kayla", "Aryan", "Grace", "Drake",
"Kiana", "Burt", "Amitoj",
"Xavier", "Shaun", "Mary"};
firstName
= firstNames[(int)(Math.random() * firstNames.length)];
grade = (int)(Math.random() * 4) +
9;
String[]
schools = {"Lockerby", "Confed", "Lasalle", "Lo-Ellen"};
school = schools[(int)(Math.random() * schools.length)];
compareMode =
1;
}
public String toString()
{
return grade + "
" + firstName + " " + lastName + " (" + school + ")";
}
public static void compareByLastName()
{
compareMode =
1;
}
public static void compareBySchool()
{
compareMode =
2;
}
public static void compareByGrade()
{
compareMode =
3;
}
@Override
public int compareTo(Object
o)
{
if (compareMode ==
1)
return compareToByLastName(o);
else if (compareMode ==
2)
return compareToBySchool(o);
else
return compareToByGrade(o);
}
public int compareToBySchool(Object o)
{
Student other =
(Student)o;
return this.school.compareTo(other.school);
}
public int compareToByLastName(Object o)
{
Student other =
(Student)o;
return this.lastName.compareTo(other.lastName);
//Note: String's compareTo compares two Strings alphanumerically.
//It returns -1, 0 or
1 in the same way as compareTo does. Very convenient!
//Note: Could improve
this to have first name serve as tie breaker.
}
public int compareToByGrade(Object o)
{
Student other =
(Student)o;
if (this.grade
< other.grade)
return -1;
else if (this.grade == other.grade)
{
return 0;
}
else //this.grade > other.grade
{
return 1;
}
}
}
|