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

