Java中如何实现输入非double类型时循环重新获取合法输入?
Java实现double类型输入合法性校验循环
核心处理逻辑如下:
- 用循环包裹输入逻辑,仅当输入符合double格式时才跳出循环
- 捕获Scanner输入不匹配时抛出的
InputMismatchException异常 - 异常触发后必须调用
Scanner.nextLine()清空输入缓冲区残留的非法内容,避免无限读取错误内容进入死循环
你可以把读取合法double的逻辑封装成通用方法,避免重复写两次校验逻辑,完整可运行代码如下:
import java.util.Scanner; import java.util.InputMismatchException; public class DoubleInputValidator { private static Scanner scanner = new Scanner(System.in); // 通用方法:传入提示语,返回用户输入的合法double值 public static double getValidDouble(String promptMsg) { double result = 0.0; boolean inputValid = false; while (!inputValid) { System.out.println(promptMsg); try { result = scanner.nextDouble(); inputValid = true; } catch (InputMismatchException e) { System.out.println("输入不合法,请输入有效的数字!"); scanner.nextLine(); // 清空缓冲区错误输入,必须保留该行 } } return result; } public static void main(String[] args) { double num1 = getValidDouble("请输入第一个数字:"); double num2 = getValidDouble("请输入第二个数字:"); // 此处可添加你自己的业务逻辑,比如计算两个数的和差积商 System.out.printf("你输入的两个数字分别是%.2f和%.2f", num1, num2); scanner.close(); } }
关键注意点
- 不要忘记导入
java.util.InputMismatchException类,否则无法正确捕获输入不匹配异常 scanner.nextLine()是必须的:当nextDouble()读取失败时,不会主动消费输入缓冲区里的错误内容,不清理的话下次读取还是会拿到同样的错误内容,触发死循环- 如果你不需要封装,也可以给两个输入分别写独立的循环校验逻辑,封装方案适合需要多次读取double值的场景
内容的提问来源于stack exchange,提问作者Christian Dela Cruz
相关产品推荐
相关产品推荐

