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

