Grading assignments starting this week (with Lab Assignment Seventeen): 

Adrian German (dgerman): 

  Barnes  , Branson, 
  Curtis  , Fu, 
  Holmes  , Man, 
  Niu     , Qian, 
  Robinson, Shepherd

Yudou (Phoebe) He: 

  Bobe, 
  Corradin, 
  Dai, 
  Garcia, 
  Jackson, 
  Mantz III, 
  Ong, 
  Reddigari, 
  Root, 
  Song

Seth (Xiaohui) Wang: 

  Badger J, 
  Bogdanoff A, 
  Crutchfield W, 
  Feltner L, 
  Hebda J, 
  Langston J, 
  Mitts A, 
  Pedersen H, 
  Richards P, 
  Schumacher G, 
  Welsh M 

Atendance in lecture today:

Mark, Daniel, Jared, Nathan, Judy, Hallie, Adam, Gabriela, James, 
Brennan, Jacquelyn, Walter, Nick, Jingzhe, Paul, Morgan, Alex Ong, 
Lauren, William, Jack, Jon, Grant, Austin, Logan, Qin, MAR3, Yiming

Problem: Sort students descending by GPA. Where the GPA is the same
sort ascending by age. Where GPA and age are the same sort by name, 
lexicografically. 

import java.util.*; 

public class Student extends Object {
  String name;
  int age; 
  double gpa; 
  public Student(String name, int age, double gpa) {
    this.name = name; 
    this.age = age;  
    this.gpa = gpa;    
  }
  public String toString() {
    return "Student(" + this.name + ": " + this.gpa + ", " + this.age + ")"; 
  }
}

class Example {
  public static void main(String[] args) { 
    ArrayList<Student> students = new ArrayList<Student>(); 
    students.add(new Student("Tom"    , 19, 2.3)); 
    students.add(new Student("Chris"  , 17, 2.9)); 
    students.add(new Student("Leslie" , 15, 2.9)); 
    students.add(new Student("Dave"   ,  8, 2.9)); 
    students.add(new Student("Laura"  , 21, 3.7)); 
    students.add(new Student("Tim"    , 18, 1.6)); 
    students.add(new Student("Timothy", 15, 1.6)); 
    students.add(new Student("Adrian" , 11, 1.6)); 
    students.add(new Student("Aaron"  , 11, 1.6)); 
    students.add(new Student("Gennis" ,  9, 0.9)); 
    students.add(new Student("Al"     ,  5, 0.9)); 
    students.add(new Student("George" , 13, 3.1)); 
  
    System.out.println( students ); 

  }
}

I decide to work on silo, command prompt:


-bash-4.1$ mkdir c212-exercises
-bash-4.1$ cd c212-exercises/
-bash-4.1$ pwd
/u/dgerman/c212-exercises
-bash-4.1$ pico -w Student.java
-bash-4.1$ pico -w Example.java
-bash-4.1$ ls -l
total 8
-rw-r--r-- 1 dgerman faculty 793 Jul 21 12:30 Example.java
-rw-r--r-- 1 dgerman faculty 342 Jul 21 12:30 Student.java
-bash-4.1$ cat Example.java
class Example {
  public static void main(String[] args) {
    ArrayList<Student> students = new ArrayList<Student>();
    students.add(new Student("Tom"    , 19, 2.3));
    students.add(new Student("Chris"  , 17, 2.9));
    students.add(new Student("Leslie" , 15, 2.9));
    students.add(new Student("Dave"   ,  8, 2.9));
    students.add(new Student("Laura"  , 21, 3.7));
    students.add(new Student("Tim"    , 18, 1.6));
    students.add(new Student("Timothy", 15, 1.6));
    students.add(new Student("Adrian" , 11, 1.6));
    students.add(new Student("Aaron"  , 11, 1.6));
    students.add(new Student("Gennis" ,  9, 0.9));
    students.add(new Student("Al"     ,  5, 0.9));
    students.add(new Student("George" , 13, 3.1));

    System.out.println( students );

  }
}

-bash-4.1$ pico -w Example.java
-bash-4.1$ cat Student.java
import java.util.*;

public class Student extends Object {
  String name;
  int age;
  double gpa;
  public Student(String name, int age, double gpa) {
    this.name = name;
    this.age = age;
    this.gpa = gpa;
  }
  public String toString() {
    return "Student(" + this.name + ": " + this.gpa + ", " + this.age + ")";
  }
}

-bash-4.1$ pico -w Student.java
-bash-4.1$ cat Student.java
public class Student extends Object {
  String name;
  int age;
  double gpa;
  public Student(String name, int age, double gpa) {
    this.name = name;
    this.age = age;
    this.gpa = gpa;
  }
  public String toString() {
    return "Student(" + this.name + ": " + this.gpa + ", " + this.age + ")";
  }
}

-bash-4.1$ cat Example.java
import java.util.*;

class Example {
  public static void main(String[] args) {
    ArrayList<Student> students = new ArrayList<Student>();
    students.add(new Student("Tom"    , 19, 2.3));
    students.add(new Student("Chris"  , 17, 2.9));
    students.add(new Student("Leslie" , 15, 2.9));
    students.add(new Student("Dave"   ,  8, 2.9));
    students.add(new Student("Laura"  , 21, 3.7));
    students.add(new Student("Tim"    , 18, 1.6));
    students.add(new Student("Timothy", 15, 1.6));
    students.add(new Student("Adrian" , 11, 1.6));
    students.add(new Student("Aaron"  , 11, 1.6));
    students.add(new Student("Gennis" ,  9, 0.9));
    students.add(new Student("Al"     ,  5, 0.9));
    students.add(new Student("George" , 13, 3.1));

    System.out.println( students );

  }
}

-bash-4.1$ javac Example.java
Picked up _JAVA_OPTIONS: -Xms512m -Xmx512m
-bash-4.1$ ls -l
total 16
-rw-r--r-- 1 dgerman faculty 991 Jul 21 12:31 Example.class
-rw-r--r-- 1 dgerman faculty 815 Jul 21 12:31 Example.java
-rw-r--r-- 1 dgerman faculty 701 Jul 21 12:31 Student.class
-rw-r--r-- 1 dgerman faculty 320 Jul 21 12:31 Student.java
-bash-4.1$ java Example
Picked up _JAVA_OPTIONS: -Xms512m -Xmx512m
[Student(Tom: 2.3, 19), Student(Chris: 2.9, 17), Student(Leslie: 2.9, 15), Student(Dave: 2.9, 8), Student(Laura: 3.7, 21), Student(Tim: 1.6, 18), Student(Timothy: 1.6, 15), Student(Adrian: 1.6, 11), Student(Aaron: 1.6, 11), Student(Gennis: 0.9, 9), Student(Al: 0.9, 5), Student(George: 3.1, 13)]
-bash-4.1$

How about sorting? 

-bash-4.1$ cat Example.java
import java.util.*;

class Example {
  public static void main(String[] args) {
    ArrayList<Student> students = new ArrayList<Student>();
    students.add(new Student("Tom"    , 19, 2.3));
    students.add(new Student("Chris"  , 17, 2.9));
    students.add(new Student("Leslie" , 15, 2.9));
    students.add(new Student("Dave"   ,  8, 2.9));
    students.add(new Student("Laura"  , 21, 3.7));
    students.add(new Student("Tim"    , 18, 1.6));
    students.add(new Student("Timothy", 15, 1.6));
    students.add(new Student("Adrian" , 11, 1.6));
    students.add(new Student("Aaron"  , 11, 1.6));
    students.add(new Student("Gennis" ,  9, 0.9));
    students.add(new Student("Al"     ,  5, 0.9));
    students.add(new Student("George" , 13, 3.1));

    System.out.println( students );

    Collections.sort( students );

    System.out.println( students );

  }
}

-bash-4.1$ javac Example.java
Picked up _JAVA_OPTIONS: -Xms512m -Xmx512m
Example.java:21: error: no suitable method found for sort(ArrayList<Student>)
    Collections.sort( students );
               ^
    method Collections.<T#1>sort(List<T#1>,Comparator< ? super T#1>) is not applicable
      (cannot instantiate from arguments because actual and formal argument lists differ in length)
    method Collections.<T#2>sort(List<T#2>) is not applicable
      (inferred type does not conform to declared bound(s)
        inferred: Student
        bound(s): Comparable< ? super Student>)
  where T#1,T#2 are type-variables:
    T#1 extends Object declared in method <T#1>sort(List<T#1>,Comparator< ? super T#1>)
    T#2 extends Comparable< ? super T#2> declared in method <T#2>sort(List<T#2>)
1 error
-bash-4.1$

This error message says:

(a) either you pass a comparator to the sorting invocation or

(b) make sure your student objects are comparable

So let's make the objects comparable: 

-bash-4.1$ pico -w Example.java
-bash-4.1$ cat Student.java
public class Student extends Object implements Comparable<Student> {
  public int compareTo(Student other) {
    if (this.gpa > other.gpa) return -1;
    else if (this.gpa < other.gpa) return 1;
    else if (this.age < other.age) return -1;
    else if (this.age > other.age) return 1;
    else return this.name.compareTo( other.name );
  }
  String name;
  int age;
  double gpa;
  public Student(String name, int age, double gpa) {
    this.name = name;
    this.age = age;
    this.gpa = gpa;
  }
  public String toString() {
    return "Student(" + this.name + ": " + this.gpa + ", " + this.age + ")";
  }
}

-bash-4.1$

-bash-4.1$ javac Example.java
-bash-4.1$ java Example
[Student(Tom: 2.3, 19), Student(Chris: 2.9, 17), Student(Leslie: 2.9, 15), Student(Dave: 2.9, 8), Student(Laura: 3.7, 21), Student(Tim: 1.6, 18), Student(Timothy: 1.6, 15), Student(Adrian: 1.6, 11), Student(Aaron: 1.6, 11), Student(Gennis: 0.9, 9), Student(Al: 0.9, 5), Student(George: 3.1, 13)]
[Student(Laura: 3.7, 21), Student(George: 3.1, 13), Student(Dave: 2.9, 8), Student(Leslie: 2.9, 15), Student(Chris: 2.9, 17), Student(Tom: 2.3, 19), Student(Aaron: 1.6, 11), Student(Adrian: 1.6, 11), Student(Timothy: 1.6, 15), Student(Tim: 1.6, 18), Student(Al: 0.9, 5), Student(Gennis: 0.9, 9)]
-bash-4.1$

So that's it. 

--