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

