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
相关产品推荐
相关产品推荐

