1. package mode.problem;
  2.  
  3. import java.util.*;
  4.  
  5. /**
  6.  *
  7.  * @author Daniel Ruess <mistermaggot@gmail.com>
  8.  */
  9. public class ModeProblem {
  10.  
  11.     /**
  12.      * @param args the command line arguments
  13.      */
  14.     public static void main(String[] args) {
  15.         List<Integer> nums = new ArrayList<Integer>();
  16.         Scanner in = new Scanner(System.in);
  17.         while (true) {
  18.             System.out.print("Enter a number (enter M to find the mode): ");
  19.             String n = in.next();
  20.             if (n.equalsIgnoreCase("M")) {
  21.                 int[] mode = findMode(nums);
  22.                 System.out.println("The mode of the number set is " + mode[0] + " with a frequency of " + mode[1]);
  23.                 return;
  24.             } else {
  25.                 for (char c : n.toCharArray()) {
  26.                     if (!Character.isDigit(c)) {
  27.                         System.err.println("Invalid input: " + n);
  28.                         return;
  29.                     }
  30.                 }
  31.                 nums.add(Integer.valueOf(n));
  32.             }
  33.         }
  34.     }
  35.    
  36.     static int[] findMode(List<Integer> vals) {
  37.         Map<Integer, Integer> map = new HashMap<Integer, Integer>();
  38.         for (Integer i : vals) {
  39.             if (map.get(i) == null) {
  40.                 map.put(i, 1);
  41.             } else {
  42.                 map.put(i, map.get(i) + 1);
  43.             }
  44.         }
  45.         int mode = -1, v = 0;
  46.         for (Integer i : map.keySet()) {
  47.             if (map.get(i) > v) {
  48.                 mode = i;
  49.                 v = map.get(i);
  50.             }
  51.         }
  52.         return new int[] { mode, v };
  53.     }
  54. }