You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 12:34:58