/**
* This is a class implements a Java application that:
*
* Executes 4 methods, 2 iterative and 2 recursive.
*
* Accepts an integer Q on the command line. This integer is the input for
* all 4 methods.
*
* If the command line has anything other than a single integer, the
* program prints an error message and exit.
*
* If the integer Q is negative or zero, the program exits without printing
* anything.
*
* Otherwise, executes each of the following four methods:
* Method 1: use a loop to print a row of Q asterisks.
* Method 2: use recursion to print a row of Q asterisks.
* Method 3: use a loop to print the numbers Q, Q - 1, ... 3, 2, 1.
* Method 4: use recursion to print the numbers Q, Q - 1, ... 3, 2, 1.
*
* @author Jade Cheng
* @assignment TA 2 part 2
* @date Jan 14, 2010
* @bugs None
*/
public class ChengJade1Part2 {
/**
* The entry point of the application.
*
* @param args The command line arguments.
*/
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("Wrong number of arguments.");
System.exit(1);
}
int q = 0;
try {
q = Integer.parseInt(args[0]);
} catch (final NumberFormatException e) {
System.err.println("Argument is not an integer.");
System.exit(1);
}
// If the integer Q is negative or zero, the program exits without
// printing anything.
if (q <= 0)
System.exit(1);
// Call the methods.
ChengJade1Part2.printAsterisksWithLoop(q);
System.out.println();
ChengJade1Part2.printAsterisksRecursively(q);
System.out.println();
ChengJade1Part2.printNumbersWithLoop(q);
System.out.println();
ChengJade1Part2.printNumbersRecursively(q);
// Exit cleanly while debugging from Eclipse.
System.exit(0);
}
/**
* Use recursion to print a row of Q asterisks.
*
* @param n The number of asterisks to print.
*/
private static void printAsterisksRecursively(final int n) {
assert n >= 0;
if(n == 0)
return;
System.out.print("* ");
printAsterisksRecursively(n-1);
}
/**
* Use a loop to print a row of Q asterisks.
*
* @param n The number of asterisks to print.
*/
private static void printAsterisksWithLoop(final int n) {
assert n > 0;
for (int i = 0; i < n - 1; i++)
System.out.print("* ");
System.out.print("*");
}
/**
* Use recursion to print the numbers Q, Q - 1, ... 3, 2, 1.
*
* @param n The number of numbers to print.
*/
private static void printNumbersRecursively(final int n) {
assert n >= 0;
if (n == 0)
return;
System.out.print(n + " ");
ChengJade1Part2.printNumbersRecursively(n - 1);
}
/**
* Use a loop to print the numbers Q, Q - 1, ... 3, 2, 1.
*
* @param n The number of numbers to print.
*/
private static void printNumbersWithLoop(final int n) {
assert n > 0;
for (int i = n; i > 1; i--)
System.out.print(i + " ");
System.out.print(1);
}
}