import java.util.HashSet; import java.util.Scanner; import java.io.Reader; import java.lang.reflect.Array; /** * KeyboardAnalysis Lab. Compare QWERTY and Dvorak keyboards. * This solution needs refactoring. * @author YOUR NAMES HERE */ public class KeyboardLab { private HashSet qTopRow; private HashSet qMiddleRow; private HashSet qBottomRow; private HashSet dTopRow; private HashSet dMiddleRow; private HashSet dBottomRow; private int qTopRowCount; private int qMiddleRowCount; private int qBottomRowCount; private int dTopRowCount; private int dMiddleRowCount; private int dBottomRowCount; /** * Initialize the sets representing keyboard rows */ private void createSets() { this.qTopRow = new HashSet(); qTopRow.add('q'); qTopRow.add('w'); qTopRow.add('e'); qTopRow.add('r'); qTopRow.add('t'); qTopRow.add('y'); qTopRow.add('u'); qTopRow.add('i'); qTopRow.add('o'); qTopRow.add('p'); this.qMiddleRow = new HashSet(); qMiddleRow.add('a'); qMiddleRow.add('s'); qMiddleRow.add('d'); qMiddleRow.add('f'); qMiddleRow.add('g'); qMiddleRow.add('h'); qMiddleRow.add('j'); qMiddleRow.add('k'); qMiddleRow.add('l'); this.qBottomRow = new HashSet(); qBottomRow.add('z'); qBottomRow.add('x'); qBottomRow.add('c'); qBottomRow.add('v'); qBottomRow.add('b'); qBottomRow.add('n'); qBottomRow.add('m'); this.dTopRow = new HashSet(); dTopRow.add('p'); dTopRow.add('y'); dTopRow.add('f'); dTopRow.add('g'); dTopRow.add('c'); dTopRow.add('r'); dTopRow.add('l'); this.dMiddleRow = new HashSet(); dMiddleRow.add('a'); dMiddleRow.add('o'); dMiddleRow.add('e'); dMiddleRow.add('u'); dMiddleRow.add('i'); dMiddleRow.add('d'); dMiddleRow.add('h'); dMiddleRow.add('t'); dMiddleRow.add('n'); dMiddleRow.add('s'); this.dBottomRow = new HashSet(); dBottomRow.add('q'); dBottomRow.add('j'); dBottomRow.add('k'); dBottomRow.add('x'); dBottomRow.add('b'); dBottomRow.add('m'); dBottomRow.add('w'); dBottomRow.add('v'); dBottomRow.add('z'); // reset the counts dBottomRowCount = 0; qTopRowCount = 0; qMiddleRowCount = 0; qBottomRowCount = 0; dTopRowCount = 0; dMiddleRowCount = 0; dBottomRowCount = 0; } /** * Run the analysis. */ public void run(Reader textinput) { String line; createSets(); Scanner input = new Scanner(textinput); // Read all lines from the input while(input.hasNext()) { line = input.next().toLowerCase(); // process all letters on a line for (char letter : line.toCharArray()) { // Determine which row the letter is on if (qTopRow.contains(letter)) { qTopRowCount++; } if (qMiddleRow.contains(letter)) { qMiddleRowCount++; } if (qBottomRow.contains(letter)) { qBottomRowCount++; } if (dTopRow.contains(letter)) { dTopRowCount++; } if (dMiddleRow.contains(letter)) { dMiddleRowCount++; } if (dBottomRow.contains(letter)) { dBottomRowCount++; } } } int total = qTopRowCount + qMiddleRowCount + qBottomRowCount; System.out.println(" QWERTY Dvorak"); System.out.println(" count % count %"); System.out.println("Top Row " + qTopRowCount + "\t\t" + (qTopRowCount *100/total) + " " + " \t" + dTopRowCount + "\t" + (dTopRowCount *100/total) ); System.out.println("HomeRow " + qMiddleRowCount + "\t\t" + (qMiddleRowCount *100/total) + " " + " \t" + dMiddleRowCount + "\t" + (dMiddleRowCount *100/total)); System.out.println("Bottom Row " + qBottomRowCount + "\t\t" + (qBottomRowCount *100/total) + " " + " \t" + dBottomRowCount + "\t" + (dBottomRowCount *100/total)); System.out.println("Total " + total); } public static void main(String[] args) throws java.io.FileNotFoundException { KeyboardLab lab = new KeyboardLab(); lab.run(new java.io.FileReader(args[0])); } /* a simple unit test */ public static void testOne() { String allLetters = "pack my box with five dozen liquor jugs"; java.io.StringReader sr = new java.io.StringReader(allLetters); KeyboardLab app = new KeyboardLab(); app.run(sr); } }