Java编写里程计算器时输入正确机场代码仍触发else分支问题
问题引发原因
- Java中
String属于引用数据类型,==运算符对比的是两个字符串对象的内存地址,而非字符串的实际内容。你通过scnr.nextLine()获取的用户输入字符串是运行时在堆内存新建的对象,和代码中写死的"LAX"、"SAN"、"LAS"这类字符串常量的存储地址不同,因此哪怕输入内容完全匹配,==判断的结果也永远为false,程序会直接进入else分支。 - else分支还存在逻辑顺序错误:
System.exit(0)会直接终止程序运行,写在scnr.nextLine()之前会导致等待用户输入回车的逻辑永远不会被执行。
修复方法
- 替换if判断中的
==为String类的equals()方法,该方法会对比字符串的实际内容。建议将常量字符串写在equals前面,可避免airCode为null时触发空指针异常。如果需要兼容用户小写输入的场景,可以使用equalsIgnoreCase()方法。 - 调整else分支的代码顺序,将等待用户输入的逻辑放在退出程序代码之前。
修复后的核心代码片段
// 替换原if判断行 if ("LAX".equals(airCode) || "SAN".equals(airCode) || "LAS".equals(airCode)) { // 原有常旅客菜单逻辑保持不变 } else { System.out.printf("Phoenix Air does not fly to %s. There will be zero miles earned. \nPress enter to quit...", airCode); scnr.nextLine(); System.exit(0); }
内容的提问来源于stack exchange,提问作者ryanmonty42
相关产品推荐
相关产品推荐

