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

Java温度转换程序提前终止求助:为何仅完成首个提问即结束?

问题分析与修复方案

嘿,我帮你找到了几个关键问题,这就是你的程序看似提前结束的原因:


1. nextDouble() 遗留的换行符被 nextLine() 读取

当你用 keyboard.nextDouble() 获取温度数值后,用户输入时按下的回车(换行符)会留在输入缓冲区里。紧接着调用的 keyboard.nextLine() 会直接读取这个空的换行符,导致 temperatureScale 变成空字符串,程序直接进入else分支输出错误提示,看起来就像运行到一半停了。

修复方法:在 nextDouble() 之后额外调用一次 keyboard.nextLine() 来清空缓冲区的换行符:

temperature = keyboard.nextDouble();
keyboard.nextLine(); // 吃掉残留的换行符

2. 字符串比较不能用 ==

Java里用 == 比较字符串,本质是比较两个字符串对象的内存引用,而不是它们的内容。哪怕两个字符串内容完全一样,只要是不同的对象,== 都会返回false。你应该用 equals() 方法来比较字符串内容;如果想让程序更友好(比如用户输入"fahrenheit"或"CELSIUS"也能识别),可以用 equalsIgnoreCase() 忽略大小写。

修复方法:把条件判断改成:

if (temperatureScale.equalsIgnoreCase("Fahrenheit")) {
    // ...
} else if (temperatureScale.equalsIgnoreCase("Celsius")) {
    // ...
}

3. 温度转换公式的运算顺序错误

你写的 Fahrenheit 转 Celsius 的公式 temperature - 32 * 5/9 会先计算 32*5/9,这不符合正确的转换逻辑(应该先做温度减32,再乘5除以9),结果会完全错误。需要给 temperature - 32 加上括号。


完整修正后的代码

import java.util.Scanner;

public class TemperatureConverter {
    public static void main(String[] args) {
        // Create scanner object
        Scanner keyboard = new Scanner(System.in);
        
        // Declare variables
        double temperature;
        double temp;
        String temperatureScale;
        
        // Use scanner to ask for user input
        System.out.println("What is the temperature?");
        temperature = keyboard.nextDouble();
        keyboard.nextLine(); // 新增:清空换行符
        
        // Use scanner to ask for user input
        System.out.println("Is the temperature Celsius or Fahrenheit?");
        temperatureScale = keyboard.nextLine();
        
        // If statement
        if (temperatureScale.equalsIgnoreCase("Fahrenheit")) {
            temp = (temperature - 32) * 5/9; // 修正运算顺序
            System.out.println("The result is " + temp + " degrees Celsius.");
        } else if (temperatureScale.equalsIgnoreCase("Celsius")) {
            temp = temperature * 1.8 + 32.0;
            System.out.println("The result is " + temp + " degrees Fahrenheit.");
        } else {
            System.out.println("An incorrect value was input.");
        }
        keyboard.close(); // 好习惯:用完Scanner记得关闭
    }
}

内容的提问来源于stack exchange,提问作者Berry.Bee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:45:33