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

Java编写里程计算器时输入正确机场代码仍触发else分支问题

问题引发原因
  1. Java中String属于引用数据类型,==运算符对比的是两个字符串对象的内存地址,而非字符串的实际内容。你通过scnr.nextLine()获取的用户输入字符串是运行时在堆内存新建的对象,和代码中写死的"LAX"、"SAN"、"LAS"这类字符串常量的存储地址不同,因此哪怕输入内容完全匹配,==判断的结果也永远为false,程序会直接进入else分支。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:30:00