ChengJade02.java

/**
 *  This is a class implements a Java application that finds and prints the prime
 *  factors of a given number.
 *  <ul>
 *  <li>it uses a recursive method to examine each of the different
 *  values of Y.</li>
 *  <li>the value from the recursive method is a void.</li>
 *  <li>it uses a loop to divide X by Y as many times as needed.</li>
 *  <li>the number X must is specified as the only command line argument to the
 *  program.
 *  </ul>
 *
 * @author     Cheng Yu
 * @assignment TA 2 Part 1
 * @date       Sep 7, 2008
 * @bugs       None
 */
public class ChengJade02 {

  /**
   * The entry point of the application.
   *
   * @param args
   */
  public static void main(final String[] args) {

    // If the command line has anything other than a single integer, the program
    // prints an error message and exits.
    if (args.length != 1) {
      System.err.println("The argument is not a single input.");
      System.exit(1);
    }

    // If the command line input is not an integer, the program prints an error
    // message and exits.
    int x = 0;
    try {
      x = Integer.parseInt(args[0]);
    } catch (final NumberFormatException e) {
      System.err.println("The argument is not an integer.");
      System.exit(2);
    }

    // If the command line input is an integer smaller than 2, the program prints
    // an error message and exits.
    if(x < 2) {
      System.err.println("The argument is not an integer greater than 1.");
      System.exit(3);
    }

    // Call the recursive function and print out the prime factors.
    System.out.print(x + "'s prime factors:");
    ChengJade02.findPrimeFactors(x, 2);
    System.out.println();

    // Exit cleanly while debugging from Eclipse.
    System.exit(0);
  }


  /**
   * Finds and print out the prime factor of a specified integer x.
   *
   * @param x the integer to be examined.
   * @param y the prime factors of the integer x.
   */
  private static void findPrimeFactors(int x, final int y) {

    // If y is greater than the square root of x, the next prime factor of x is
    // itself.  Never print out a factor of "1".
    if (y > Math.sqrt(x)) {
      if (x != 1)
        System.out.print("\t" + x);
      return;
    }

    // If y is a prime factor, print out y. Then dive x by y as many times as
    // needed.
    if (x % y == 0) {
      System.out.print("\t" + y);
      do {
        x /= y;
      } while (x % y == 0);
    }

    // Call the function with either modified or original x. Check if the next
    // y is a primer factor.
    ChengJade02.findPrimeFactors(x, y + 1);
  }
}
Valid HTML 4.01 Valid CSS