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

Java内存游戏开发:Scanner输入与字符串判断问题求助

问题解决:Java字符串比较导致的条件分支不执行
  • 核心问题:你用==比较字符串是错误的。Java里==比对的是字符串对象的内存引用地址,不是字符串内容。哪怕输入的"easy"和代码里写的"easy"内容完全一致,它们也可能是内存里的不同对象,所以==判断会返回false,直接跳过easy的分支。
  • 为什么difficulty_list.contains(difficulty)能正常工作?因为ArrayList的contains方法内部是用equals()来比对字符串内容的,不是==。

解决方案

  1. 替换字符串比较方式:把所有用==的地方改成equals()方法,推荐用常量字符串调用equals(),能避免空指针风险:

    if ("easy".equals(difficulty)) {
        // easy模式的逻辑代码
    } else if ("medium".equals(difficulty)) {
        // medium模式的逻辑代码
    } else {
        // hard模式的逻辑代码
    }
    
  2. 优化输入容错性:打开你注释掉的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:01:06