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

Java基础do while循环实现的温度转换程序第二次运行崩溃问题

Java温度转换计算器崩溃问题修复

报错原因

  • Scanner方法特性导致的换行符残留:nextDouble()、next()方法仅读取对应格式的输入内容,不会处理输入末尾的换行符。第一次循环执行结束后,输入缓冲区会残留未被读取的换行符,第二次循环执行到stdin.nextLine().charAt(0)时,nextLine()会直接读取到残留的换行符返回空字符串,对空字符串调用charAt(0)就触发了字符串索引越界异常。
  • 循环逻辑错误:当前判断循环继续的条件为while ( a == 'n' ),与预期的「用户输入n则退出程序」的逻辑完全相反。

修复后的完整代码

import java.util.Scanner;

public class temp3 {
    public static void main(String[] args){
        Scanner stdin = new Scanner(System.in);
        char unit;
        double temp;
        char a;

        do {
            System.out.print("Enter a temperature unit (c for Celsius and f for Fahrenheit): ");
            unit = stdin.nextLine().charAt(0);

            System.out.print("Enter a temperature degree(e.g., 35.5): ");
            temp = stdin.nextDouble();
            // 吃掉nextDouble残留的换行符
            stdin.nextLine();

            if (unit == 'c' || unit == 'C'){
                // 示例转换逻辑,可替换为摄氏转华氏的正确公式:temp * 9/5 + 32
                System.out.println("转换结果:" + temp * 2);
            } else if (unit == 'f' || unit == 'F') {
                // 示例转换逻辑,可替换为华氏转摄氏的正确公式:(temp - 32) * 5/9
                System.out.println("转换结果:" + temp * 3);
            } else {
                System.out.println("Invalid temperature unit");
            }

            System.out.println("play again?");
            a = stdin.next().charAt(0);
            // 吃掉next残留的换行符
            stdin.nextLine();
        }
        // 修正循环条件:输入n/N则退出,否则继续
        while (a != 'n' && a != 'N');

        stdin.close();
    }
}

关键修改点

  • 每次调用nextDouble()、next()之后新增stdin.nextLine()语句,主动消耗缓冲区残留的换行符,避免后续nextLine()读取到空内容
  • 修正循环继续条件,匹配用户输入n就退出的预期
  • 新增Scanner资源关闭语句,避免资源泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:24:05