5.7 验证输入
以下的方法调用了 5.6 节中的 printLogarithm:
public static void scanDouble() {Scanner in = new Scanner(System.in);System.out.print("Enter a number: ");double x = in.nextDouble();printLogarithm(x);}
这个示例调用了 nextDouble,因此 Scanner 将尝试读取一个 double 值。如果用户输入的是一个浮点数,Scanner 将把它转换为 double 值;但如果用户输入的是其他类型的值, Scanner 将引发 InputMismatchException 异常。
为防范这种错误,可在分析前检查输入:
public static void scanDouble() {Scanner in = new Scanner(System.in);System.out.print("Enter a number: ");if (!in.hasNextDouble()) {String word = in.next();System.err.println(word + " is not a number");return;}double x = in.nextDouble();printLogarithm(x);}
Scanner 类提供了方法 hasNextDouble,该方法用于检查能否将输入流中的下一个标记转换为 double 值。如果答案是肯定的,那么就可以调用 nextDouble,且不会引发异常。如果答案是否定的,那么就显示一条错误消息并返回。从 main 方法返回将导致程序终止。
