fork download
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. import java.io.IOException;
  4. import java.lang.NumberFormatException;
  5. import java.util.ArrayList;
  6. import java.util.function.Predicate;
  7.  
  8. class Collatz {
  9. public static void main (String[] args) throws NumberFormatException {
  10. int n = 0;
  11. try {
  12. do {
  13. System.out.print("Enter an integer greater than 0: ");
  14. n = Integer.parseInt(br.readLine());
  15. } while (n <= 0);
  16. System.err.println("Caught exception " + e.getMessage());
  17. System.exit(1);
  18. }
  19. System.out.format("The Collatz sequence starting from %d", n);
  20. ArrayList<Integer> collatz = new ArrayList<>();
  21. while (n > 1) {
  22. collatz.add(n);
  23. if ((n % 2) == 0)
  24. n /= 2;
  25. else
  26. n = (3 * n) + 1;
  27. }
  28. collatz.add(n);
  29. System.out.format(" has %d elements.%n", collatz.size());
  30. Predicate<Integer> isEvenNumber = e -> e % 2 == 0;
  31. Predicate<Integer> isOddNumber = o -> o % 2 != 0;
  32. System.out.format("There are %d even numbers and %d odd numbers",
  33. collatz.stream().filter(isEvenNumber).count(),
  34. collatz.stream().filter(isOddNumber).count());
  35. }
  36. }
Success #stdin #stdout 0.12s 56356KB
stdin
7
stdout
Enter an integer greater than 0: The Collatz sequence starting from 7 has 17 elements.
There are 11 even numbers and 6 odd numbers