* mahazuga: Mary Ann
* serepate: Serena
* hgarciah: Henri
* balbakr: Bakr
* ruifan: Rui
* mzelenin: Matthew
* jnp2: Jay
* zeyang: Zejun
* zhang486: Jingyun
* yiwecao: Yiwei
* rthammon: Ryan
* wang686: Jiaxing
* dweissma: Andrew
* kevcao: Kevin
* ssalmero: Salmeron, Santiago (TA)
* luo23: Yawen
  runxzhao: Runxia
* dgerman: German, Dan-Adrian (Primary Instructor)
  creba: Chris

Minute paper: 

  any questions, clarifications about the exam

  any specific challenges right now

The first exam checked that you can read Java. 

This one that you can express yourself in Java. 

Chapter 1-8: you need to write full blown programs. 

Tomorrow: not Exam 03. 

Welcome to DrJava.  Working directory is C:\Users\dgerman
> import java.util.ArrayList;
> ArrayList<String> a = new ArrayList<String>();
> a
[]
> a.add("Kavanaugh")
true
> a
[Kavanaugh]
> a.add("Kavanaugh")
true
> a.add("Barrett")
true
> a
[Kavanaugh, Kavanaugh, Barrett]
> a.add("Kavanaugh")
true
> a.add("Barrett")
true
> a.add("Kethledge")
true
> a
[Kavanaugh, Kavanaugh, Barrett, Kavanaugh, Barrett, Kethledge]


How about something else:

Welcome to DrJava.  Working directory is C:\Users\dgerman
> import java.util.Map;
> import java.util.HashMap;
> Map<String, Integer> a = new HashMap<String, Integer>();
> a
{}
> a.put("Kavanaugh", 1)
null
> a
{Kavanaugh=1}
> a.put("Barrett", 1)
null
> a
{Barrett=1, Kavanaugh=1}
> a.put("Kethledge", 1)
null
> a
{Kethledge=1, Barrett=1, Kavanaugh=1}
> a.put("Laura", 1)
null
> a
{Laura=1, Kethledge=1, Barrett=1, Kavanaugh=1}
> a.get("Leslie")
null
> a
{Laura=1, Kethledge=1, Barrett=1, Kavanaugh=1}
> a.get("Kavanaugh")
1
> if (a.get("Leslie") == null) a.put("Leslie", 1); else a.put("Leslie", a.get("Leslie") + 1);
> a
{Laura=1, Kethledge=1, Barrett=1, Leslie=1, Kavanaugh=1}
> if (a.get("Leslie") == null) a.put("Leslie", 1); else a.put("Leslie", a.get("Leslie") + 1);
> if (a.get("Leslie") == null) a.put("Leslie", 1); else a.put("Leslie", a.get("Leslie") + 1);
> if (a.get("Leslie") == null) a.put("Leslie", 1); else a.put("Leslie", a.get("Leslie") + 1);
> a
{Laura=1, Kethledge=1, Barrett=1, Leslie=4, Kavanaugh=1}


Let's pretend we collect more votes:

> a
{Laura=1, Kethledge=1, Barrett=1, Leslie=4, Kavanaugh=1}
> String c = "Laura"; if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
> a
{Laura=2, Kethledge=1, Barrett=1, Leslie=4, Kavanaugh=1}
> c = "Kavanaugh"
"Kavanaugh"
> if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
> if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
> if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
> if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
> if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
> a
{Laura=2, Kethledge=1, Barrett=1, Leslie=4, Kavanaugh=6}
> c = "Barrett"
"Barrett"
> if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
> if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
> a
{Laura=2, Kethledge=1, Barrett=3, Leslie=4, Kavanaugh=6}


Can you add a new entry this way? 

> c = "Larry"
"Larry"
> a
{Laura=2, Kethledge=1, Barrett=3, Leslie=4, Kavanaugh=6}
> c
"Larry"
> if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
> a
{Laura=2, Kethledge=1, Larry=1, Barrett=3, Leslie=4, Kavanaugh=6}
> if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
> if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
> if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
> if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
> if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
> if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
> if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
> a
{Laura=2, Kethledge=1, Larry=8, Barrett=3, Leslie=4, Kavanaugh=6}


Now let's also sort:

import java.util.*;

public class Candidate implements Comparable<Candidate> {
  private String name; 
  private int votes; 
  public Candidate(String name, int votes) {
    this.name = name; 
    this.votes = votes;
  }
  public String toString() {
    return this.name + ":" + this.votes; 
  }
  public int compareTo(Candidate other) {
    if (this.votes > other.votes) return -1; // this comes first
    else if (this.votes < other.votes) return 1; // other comes first
    else return this.name.compareTo(other.name); // sort lexicographically
  }
  public static void main(String[] args) {
    Map<String, Integer> a = new HashMap<String, Integer>();
    a.put("Kavanaugh", 1);
    a.put("Barrett", 1);
    a.put("Kethledge", 1);
    a.put("Laura", 1);
    if (a.get("Leslie") == null) a.put("Leslie", 1); else a.put("Leslie", a.get("Leslie") + 1);
    if (a.get("Leslie") == null) a.put("Leslie", 1); else a.put("Leslie", a.get("Leslie") + 1);
    if (a.get("Leslie") == null) a.put("Leslie", 1); else a.put("Leslie", a.get("Leslie") + 1);
    if (a.get("Leslie") == null) a.put("Leslie", 1); else a.put("Leslie", a.get("Leslie") + 1);
    String c = "Laura"; 
    if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
    c = "Kavanaugh";
    if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
    if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
    if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
    if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
    if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
    c = "Barrett";
    if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
    if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
    c = "Larry";
    if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
    if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
    if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
    if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
    if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
    if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
    if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
    if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
    c = "Barrett"; 
    if (a.get(c) == null) a.put(c, 1); else a.put(c, a.get(c) + 1);
    
    System.out.println( a ); 
    
    ArrayList<Candidate> u = new ArrayList<Candidate>();
    for (String key : a.keySet())
      u.add(new Candidate(key, a.get(key))); 
    
    System.out.println( u );
    Collections.sort( u ); 
    System.out.println( u );
    
  }
}

Here's how this works:

Welcome to DrJava.  Working directory is C:\Users\dgerman\Desktop
> run Candidate
{Laura=2, Kethledge=1, Larry=8, Barrett=4, Leslie=4, Kavanaugh=6}
[Laura:2, Kethledge:1, Larry:8, Barrett:4, Leslie:4, Kavanaugh:6]
[Larry:8, Kavanaugh:6, Barrett:4, Leslie:4, Laura:2, Kethledge:1]


--