A solution to the Ulam Sequence problem is written here as a class with static methods. One method computes and returns the sequence as a string, and the other returns it as an ArrayList.
Missing main and user interface. You need to write a main program and a user interface (eg, JOptionPane or GUI) to use these functions, or just copy the function into an existing program.
Note that the second function uses Java 5 features: autoboxing and generics.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
// flow-loops/ulam/UlamLogic.java - Compute Ulam sequence import java.util.*; /** * UlamLogic class. This class could be used as the logic * for either a GUI or command-line user interface. * Note: computeUlamSequence() uses Java 5 features. * @version 2004-11-06 * @author Fred Swartz */ public class UlamLogic { /** Function which computes the Ulam sequence. * A string value is only useful for display. * Use the ArrayList version below for more utility. * @param n Starting number for Ulam sequence. * @return String of comma-separated values in sequence. */ public static String computeUlamString(int n) { String result = "" + n; while (n > 1) { if (n%2 == 0) { // if even n = n / 2; } else { // if odd n = 3 * n + 1; } result = result + ", " + n; } return result; }//end computeUlamString /** Function which computes the Ulam sequence. * The use of an ArrayList is more general than * a string because the numbers can be used (eg, to find * the maximum value ever reached), the number of * elements in the sequence can easily be determined, etc. * Note: Java 5 features (generics and autoboxing). * @param n Starting number for Ulam sequence. * @return ArrayList of the sequence values. */ public static ArrayList<Integer> computeUlamSequence(int n) { ArrayList<Integer> result = new ArrayList<Integer>(); result.add(n); while (n > 1) { if (n%2 == 0) { // if even n = n / 2; } else { // if odd n = 3 * n + 1; } result.add(n); } return result; }//end computeUlamSequence } |