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

String校验if语句引发代码不可达问题求助

问题根源:多余的分号导致代码逻辑异常

嘿,这问题我太熟了!你看第二个if语句末尾多了个分号,这就是导致currentUser = gar.getAccount(userN);永远不可达的罪魁祸首。

具体分析

你写的这段代码:

if(gar.getAccount(userN).getPassword().equals(userP) == false); {
    //if entered password doesn't match
    error("Incorrect password");
    return;
}

那个末尾的分号(;)会让Java认为这个if语句已经结束了——也就是说,不管equals(userP) == false的结果是true还是false,这个if都只会执行到分号为止。后面的大括号{}变成了一个独立的代码块,不管密码是否正确,这个块里的error("Incorrect password");和return;都会被执行,直接退出logIn()方法。自然,下面的currentUser赋值语句永远没机会运行。

修复方案

把那个多余的分号删掉就行,还可以把条件写得更简洁(用!代替== false):

if(!gar.getAccount(userN).getPassword().equals(userP)) {
    //if entered password doesn't match
    error("Incorrect password");
    return;
}

这样if的逻辑就会正确绑定后面的代码块:只有密码不匹配时,才会执行错误提示和return,否则就会走到currentUser赋值那一行。

额外小建议

为了避免重复调用gar.getAccount(userN),可以把它先存到一个变量里,既提升性能又让代码更易读:

Attendant account = gar.getAccount(userN);
if(account == null) {
    error("Incorrect username");
    return;
}
if(!account.getPassword().equals(userP)) {
    error("Incorrect password");
    return;
}
currentUser = account;

内容的提问来源于stack exchange,提问作者ToastyHaymaker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:03:42