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

Java String方法返回非预期值问题求助

Java大富翁银行程序收款方/付款方验证失效问题解决

核心问题原因

你的验证方法始终返回无效提示,是因为Java中字符串比较不能用==——==比较的是字符串对象的内存引用,而非实际内容。即使两个字符串内容完全相同,只要是不同的对象实例,==就会返回false,导致匹配逻辑永远无法触发。

问题代码定位

在askAndCheckRecipient和askAndCheckPayer方法的条件判断中,错误使用了==进行字符串比较:

// 错误写法
if(recipient.toLowerCase() == player.getName().toLowerCase() || recipient.toLowerCase() == "bank")

修改方案

使用equalsIgnoreCase()方法直接忽略大小写比较字符串内容,无需手动调用toLowerCase(),代码更简洁可靠。同时可将"bank"的判断放在循环外,减少不必要的循环执行:

修改后的askAndCheckRecipient方法

static String askAndCheckRecipient(Player[] playerArray) {
    Scanner scan = new Scanner(System.in);
    System.out.println("Who is the recipient?: ");
    String recipient = scan.nextLine();
    
    // 先校验是否为银行
    if ("bank".equalsIgnoreCase(recipient)) {
        return recipient;
    }
    // 遍历玩家列表匹配
    for(Player player : playerArray) {
        if (recipient.equalsIgnoreCase(player.getName())) {
            return recipient;
        }
    }
    return "recipient is not valid";
}

修改后的askAndCheckPayer方法

static String askAndCheckPayer(Player[] playerArray) {
    Scanner scan = new Scanner(System.in);
    System.out.println("Who is the payer?: ");
    String payer = scan.nextLine();
    
    if ("bank".equalsIgnoreCase(payer)) {
        return payer;
    }
    for(Player player : playerArray) {
        if (payer.equalsIgnoreCase(player.getName())) {
            return payer;
        }
    }
    return "payer is not valid";
}

额外优化建议

你代码中多次创建Scanner对象,建议在main方法中创建一个全局Scanner实例,供其他方法复用,避免重复创建IO资源。

内容的提问来源于stack exchange,提问作者Hashim Bin Talha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:45:55