如何修复Java代码使其首次接受合法数字输入并支持多次错误输入?
修复Java倒计时程序的输入验证问题
原代码的核心问题
- 重复调用
in.nextDouble()导致多次读取输入:原代码在验证和取值阶段分别调用了这个方法,每调用一次就会要求用户输入新内容,这就是首次输入后没反应、需要再次输入的原因。 - 错误验证没有循环机制:只做了单次错误检查,用户输入错误后程序不会继续等待正确输入,多次错误直接崩溃。
修复后的代码
import java.util.Scanner; public class CountDownByTwos { public static void main(String[] args) { Scanner in = new Scanner(System.in); double num = -1; System.out.println("Input a positive number and I will count down by 2"); // 循环验证输入,直到拿到合法正数 while (true) { if (!in.hasNextDouble()) { String invalidInput = in.next(); System.err.println(invalidInput + " 不是有效数字,请重新输入"); } else { num = in.nextDouble(); if (num <= 0) { System.err.println("请输入正数,请重新输入"); } else { // 输入合法,退出循环 break; } } } // 执行倒计时逻辑,格式化输出避免浮点数小数位问题 for (double i = num; i >= 0; i -= 2) { System.out.printf("%.0f%n", i); } in.close(); } }
修改要点说明
- 用
while(true)循环套住输入验证逻辑,直到用户输入符合要求的正数才跳出循环,解决多次错误输入崩溃的问题。 - 只在确认输入是数字后才读取数值,避免重复读取输入导致的无响应问题。
- 增加输出格式化,把浮点数转成整数形式显示,避免出现类似
3.0、1.0的冗余小数位。
内容的提问来源于stack exchange,提问作者Topy
相关产品推荐
相关产品推荐

