package demo; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.TimeUnit; public class MathGame { private static Random random = new Random(); private int illegalArgumentCount = 0; public static void main(String[] args) throws InterruptedException { MathGame game = new MathGame(); while (true) { game.run(); TimeUnit.SECONDS.sleep(1); } } public void run() throws InterruptedException { try { int number = random.nextInt()/10000; List primeFactors = primeFactors(number); print(number, primeFactors); } catch (Exception e) { System.out.println(String.format("illegalArgumentCount:%3d, ", illegalArgumentCount) + e.getMessage()); } } public static void print(int number, List primeFactors) { StringBuffer sb = new StringBuffer(number + "="); for (int factor : primeFactors) { sb.append(factor).append('*'); } if (sb.charAt(sb.length() - 1) == '*') { sb.deleteCharAt(sb.length() - 1); } System.out.println(sb); } public List primeFactors(int number) { if (number < 2) { illegalArgumentCount++; throw new IllegalArgumentException("number is: " + number + ", need >= 2"); } List result = new ArrayList(); int i = 2; while (i <= number) { if (number % i == 0) { result.add(i); number = number / i; i = 2; } else { i++; } } return result; } }