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"); }
}
}
}
 |