/****************************************************************************** * 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(); } }