5.7 验证输入

以下的方法调用了 5.6 节中的 printLogarithm

  1. public static void scanDouble() {
  2. Scanner in = new Scanner(System.in);
  3. System.out.print("Enter a number: ");
  4. double x = in.nextDouble();
  5. printLogarithm(x);
  6. }

这个示例调用了 nextDouble,因此 Scanner 将尝试读取一个 double 值。如果用户输入的是一个浮点数,Scanner 将把它转换为 double 值;但如果用户输入的是其他类型的值, Scanner 将引发 InputMismatchException 异常。

为防范这种错误,可在分析前检查输入:

  1. public static void scanDouble() {
  2. Scanner in = new Scanner(System.in);
  3. System.out.print("Enter a number: ");
  4. if (!in.hasNextDouble()) {
  5. String word = in.next();
  6. System.err.println(word + " is not a number");
  7. return;
  8. }
  9. double x = in.nextDouble();
  10. printLogarithm(x);
  11. }

Scanner 类提供了方法 hasNextDouble,该方法用于检查能否将输入流中的下一个标记转换为 double 值。如果答案是肯定的,那么就可以调用 nextDouble,且不会引发异常。如果答案是否定的,那么就显示一条错误消息并返回。从 main 方法返回将导致程序终止。