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

