Java内存游戏开发:Scanner输入与字符串判断问题求助
问题解决:Java字符串比较导致的条件分支不执行
- 核心问题:你用
==比较字符串是错误的。Java里==比对的是字符串对象的内存引用地址,不是字符串内容。哪怕输入的"easy"和代码里写的"easy"内容完全一致,它们也可能是内存里的不同对象,所以==判断会返回false,直接跳过easy的分支。 - 为什么
difficulty_list.contains(difficulty)能正常工作?因为ArrayList的contains方法内部是用equals()来比对字符串内容的,不是==。
解决方案
替换字符串比较方式:把所有用
==的地方改成equals()方法,推荐用常量字符串调用equals(),能避免空指针风险:if ("easy".equals(difficulty)) { // easy模式的逻辑代码 } else if ("medium".equals(difficulty)) { // medium模式的逻辑代码 } else { // hard模式的逻辑代码 }优化输入容错性:打开你注释掉的
strip()和toLowerCase(),处理用户可能输入的空格或大小写错误(比如输入" Easy "或"EASY"):difficulty = difficulty.strip().toLowerCase();
修改后的代码片段示例
Scanner select_diff = new Scanner(System.in); System.out.println("Please select a difficulty. Choose between easy, medium, or hard: "); ArrayList<String> difficulty_list = new ArrayList<String>(); difficulty_list.add("easy"); difficulty_list.add("medium"); difficulty_list.add("hard"); String difficulty = select_diff.nextLine(); // 获取用户输入 System.out.println(difficulty); // 验证输入内容 // 处理输入的空格和大小写 difficulty = difficulty.strip().toLowerCase(); // 简化无效输入判断的写法 while (!difficulty_list.contains(difficulty)) { System.out.println("Invalid Input. Please try again."); // 这里也要同步处理新输入的内容 difficulty = select_diff.nextLine().strip().toLowerCase(); } // 用equals正确匹配难度 if ("easy".equals(difficulty)) { System.out.println("进入easy模式"); } else if ("medium".equals(difficulty)) { System.out.println("进入medium模式"); } else { System.out.println("进入hard模式"); }
内容的提问来源于stack exchange,提问作者Derek Kwon
相关产品推荐
相关产品推荐

