[ Team LiB ] Previous Section Next Section

1.12 Interactive Input

Example 1-12 shows yet another program for computing factorials. Unlike Example 1-11, however, it doesn't just compute one factorial and quit. Instead, it prompts the user to enter a number, reads that number, prints its factorial, and then loops and asks the user to enter another number. The most interesting thing about this example is the technique it uses to read user input from the keyboard. It uses the readLine( ) method of a BufferedReader object to do this. The line that creates the BufferedReader may look confusing. For now, take it on faith that it works; you don't really need to understand how it works until we reach Chapter 3. Another feature of note in Example 1-12 is the use of the equals( ) method of the String object line to check whether the user has typed "quit".

The code for parsing the user's input and computing and printing the factorial is the same as in Example 1-11, and again, it is enclosed within a try clause. In Example 1-12, however, there is only a single catch clause to handle the possible exceptions. This one handles any exception object of type Exception. Exception is the superclass of all exception types, so this one catch clause is invoked no matter what type of exception is thrown.

Example 1-12. FactQuoter.java
package je3.basics;
import java.io.*; // Import all classes in java.io package.  Saves typing.

/**
 * This program displays factorials as the user enters values interactively
 **/
public class FactQuoter {
    public static void main(String[  ] args) throws IOException {
        // This is how we set things up to read lines of text from the user.
        BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
        // Loop forever
        for(;;) {
            // Display a prompt to the user
            System.out.print("FactQuoter> ");
            // Read a line from the user
            String line = in.readLine( );
            // If we reach the end-of-file, 
            // or if the user types "quit", then quit
            if ((line == null) || line.equals("quit")) break;
            // Try to parse the line, and compute and print the factorial
            try { 
                int x = Integer.parseInt(line);
                System.out.println(x + "! = " + Factorial4.factorial(x)); 
            }
            // If anything goes wrong, display a generic error message
            catch(Exception e) { System.out.println("Invalid Input"); }
        }
    }
}
    [ Team LiB ] Previous Section Next Section