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

Java编程问题:实现输入stop/s终止,持续计算输入数平方根

解决程序终止逻辑失效的问题

嘿,我一眼就看出问题出在输入读取的逻辑顺序上啦!你原来的代码应该是直接用nextDouble()读取数字,但如果用户输入的是"stop"或"s"这类字符串,会直接触发输入不匹配异常,根本没机会走到终止判断的逻辑。咱们来调整一下代码逻辑:

修正后的完整代码

import java.util.Scanner;

public class Question5 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String inputStr;
        double num;

        while (true) {
            System.out.print("请输入数字(输入stop/s终止程序):");
            // 先读取整行输入,避免残留换行符干扰后续读取
            inputStr = sc.nextLine().trim().toLowerCase();

            // 优先检查终止条件
            if (inputStr.equals("stop") || inputStr.equals("s")) {
                System.out.println("程序已终止");
                break;
            }

            // 尝试将输入转为数字,处理无效输入情况
            try {
                num = Double.parseDouble(inputStr);
                // 额外处理负数的平方根场景
                if (num < 0) {
                    System.out.println("负数没有实数平方根哦");
                } else {
                    System.out.println("平方根为:" + Math.sqrt(num));
                }
            } catch (NumberFormatException e) {
                System.out.println("请输入有效的数字或终止指令!");
            }
        }
        sc.close();
    }
}

核心调整点说明

  • 先读字符串再判断:不再直接读取数字类型,先获取用户输入的完整字符串,确保终止指令能被优先识别。
  • 大小写兼容:用toLowerCase()统一转换输入,用户输入"Stop""S"这类变体也能触发终止。
  • 异常捕获:用try-catch处理输入既不是数字也不是终止指令的情况,给用户清晰的提示。
  • 负数友好处理:额外判断输入是否为负数,避免Math.sqrt()返回NaN时用户一脸困惑。

这样调整后,程序就能完美实现你想要的功能啦!

内容的提问来源于stack exchange,提问作者Redent

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:57:53