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

ArrayList结合if/else的Java交互程序响应异常求助

问题诊断与修复方案

嘿,我一眼就揪出问题的根源啦!你当前代码的核心bug出在输入读取的环节:

你用了scanner.next()来获取用户输入,但这个方法只会读取到空格就停止!当用户输入“North Carolina”时,scanner.next()只会把“North”这第一个单词添加到states列表里,完全没把“Carolina”存进去。那后续判断states.contains("North Carolina")自然匹配不上,程序就直接走到最后那个默认响应了。

修复步骤

  • 把scanner.next()替换成scanner.nextLine(),这个方法能读取用户输入的整一行内容,包括空格,这样就能完整获取“North Carolina”这类带空格的州名。
  • 为了简化大小写判断,建议统一把输入转成小写(或大写)后再存储和匹配,不用重复写两次contains判断。

修改后的代码示例

import java.util.ArrayList;
import java.util.Scanner;

public class StateResponder {
    public static void main(String[] args) {
        ArrayList<String> states = new ArrayList<>();
        Scanner scanner = new Scanner(System.in);

        System.out.print("Where are you from? ");
        // 读取整行输入并转小写,统一匹配标准
        String userInput = scanner.nextLine().toLowerCase();
        states.add(userInput);

        if (userInput.contains("florida")) {
            System.out.println("So was I!\n");
        } else if (userInput.contains("north carolina")) {
            // 这里填入North Carolina对应的响应内容
            System.out.println("Nice choice—love the coastal towns there!\n");
        } else {
            System.out.println("I would have never guessed!\n");
        }

        scanner.close();
    }
}

额外优化小建议

  • 如果你不需要存储历史输入记录,其实可以不用ArrayList,直接用字符串变量判断就行,代码会更简洁。
  • 要是后续要支持更多州名的响应,用HashMap来存储州名和对应回复会比一堆if/else更优雅,维护起来也更方便。

内容的提问来源于stack exchange,提问作者user9259414

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:24:00