VoteTally.java


Below is the syntax highlighted version of VoteTally.java from §3.5 Inheritance.


/******************************************************************************
 *  Compilation:  javac VoteTally.java
 *  Execution:    java VoteTally county USPS
 *  Dependencies: In.java
 *
 *
 ******************************************************************************/

import java.awt.Color;

public class VoteTally {
    private final int republican;   // votes for Republican candidate
    private final int democrat;     // votes for Democrat candidate
    private final int independent;  // votes for Independent candidate

    // constructor
    public VoteTally(int republican, int democrat, int independent) {
        this.democrat    = democrat;
        this.republican  = republican;
        this.independent = independent;
    }

    // constructor - read results from a file
    public VoteTally(String name, String usps, int year) {

        // correct mismatch between TIGER and uselectionatlas.org
        name = name.toLowerCase();
        name = name.replaceAll(" parish", "");
        name = name.replaceAll(" city", "");

        // read in the voting information
        In in = new In("uselectionatlas/" + usps + year + ".txt");
        String input = in.readAll();
        input = input.replaceAll("Miami-Dade", "Dade");
        input = input.toLowerCase();

        int i0 = input.indexOf("\n" + name);
        if (i0 == -1) {
            // throw new RuntimeException(name + ", " + usps + " not found");
            System.err.println(name + ", " + usps + " not found");
        }
        int i1 = input.indexOf(",", i0 + 1);
        int i2 = input.indexOf(",", i1 + 1);
        int i3 = input.indexOf(",", i2 + 1);
        int i4 = input.indexOf(",", i3 + 1);

        republican  = Integer.parseInt(input.substring(i1 + 1, i2));
        democrat    = Integer.parseInt(input.substring(i2 + 1, i3));
        independent = Integer.parseInt(input.substring(i3 + 1, i4));
    }


    // return color as a mix of republican (red), independent (green) and democrat (blue)
    public Color purple() {
        int total = democrat + republican + independent;
        if (total == 0) return Color.BLACK;
        return new Color(1.0f * republican  / total,
                         1.0f * independent / total,
                         1.0f * democrat    / total);
    }

    // return red, green, or blue, depending on which party has the most votes
    public Color rgb() {
        int total = democrat + republican + independent;
        if (total == 0) return Color.BLACK;
        if (republican  > Math.max(independent, democrat))   return StdDraw.RED;
        if (democrat    > Math.max(independent, republican)) return StdDraw.BLUE;
        if (independent > Math.max(republican,  democrat))   return StdDraw.GREEN;
        return StdDraw.BLACK;
    }

    public String toString() {
        return String.format("Republican = %d\nDemocrat = %d\nIndependent = %d",
                             republican, democrat, independent);
    }

    public static void main(String[] args) {

        VoteTally vt = new VoteTally(100, 300, 30);
        StdOut.println(vt);
        StdOut.println(vt.purple());
        StdOut.println();

        vt = new VoteTally("Mercer", "NJ", 2004);
        StdOut.println(vt);
        StdOut.println(vt.purple());
        StdOut.println();

        vt = new VoteTally("DeSoto", "FL", 2004);
        StdOut.println(vt);
        StdOut.println(vt.purple());
        StdOut.println();
    }
}


Copyright © 2000–2022, Robert Sedgewick and Kevin Wayne.
Last updated: Thu Aug 11 10:27:11 EDT 2022.