由Java中的多个缩进if语句混淆

时间:2014-07-30 13:37:17

标签: java if-statement

所以我之前很难遵循方法,我回来添加另一个缩进的if语句来检查使用for循环的用户数组列表。 在我添加之前,该方法工作正常但现在我在最后一个'其他'关键词。它说"语法错误。请删除此令牌"。 当我删除最后一个else关键字时,我没有错误,但我不确定为什么当它们是四个关键字时 - 是否应该没有第四个关键字? 谢谢你给予的任何帮助。

//method to validate input by user to log in
public void validateInput() {
    //presence check on username
    if (qi.getEnteredName().length() > 0) { 
        //compare entered username to stored user accounts
        for(int i = 0; i < users.size(); i++) {
            if (qi.getEnteredName().equalsIgnoreCase(getUserList().get(i).getUsername())) {

                //presence check on password
                if (qi.getEnteredPass().length > 0) {
                    //ensures password is at least 6 char long
                    if(qi.getEnteredPass().length > 5) {
                        qi.getMainCards().next(qi.getPanels()); //getPanels() == cardPanel

                    } else {
                        JOptionPane.showMessageDialog(null, 
                                "Your password must be at least six characters long.", 
                                "Password Violation", JOptionPane.WARNING_MESSAGE);
                    }
                }else {
                    JOptionPane.showMessageDialog(null, 
                            "Your did not enter a password.", 
                            "Password Violation", JOptionPane.WARNING_MESSAGE);
                }
            }


            else { JOptionPane.showMessageDialog(null, 
                    "You are not registered.", 
                    "User Violation", JOptionPane.WARNING_MESSAGE);
            }
            else {
                JOptionPane.showMessageDialog(null, 
                        "You did not enter a username. Please try again.", 
                        "Username Violation", JOptionPane.WARNING_MESSAGE);
            }
        }
    }

}

3 个答案:

答案 0 :(得分:4)

好吧,基本上你的最后两个else语句与同一个if语句匹配,这可能不是你想要的。您必须将第二个其他语句移到另一个}之外。你有这个:

else { JOptionPane.showMessageDialog(null, 
                "You are not registered.", 
                "User Violation", JOptionPane.WARNING_MESSAGE);
        }
        else {
            JOptionPane.showMessageDialog(null, 
                    "You did not enter a username. Please try again.", 
                    "Username Violation", JOptionPane.WARNING_MESSAGE);
        }
    }

但你真的想要这个:

else { JOptionPane.showMessageDialog(null, 
                "You are not registered.", 
                "User Violation", JOptionPane.WARNING_MESSAGE);
        }

}else {
            JOptionPane.showMessageDialog(null, 
                    "You did not enter a username. Please try again.", 
                    "Username Violation", JOptionPane.WARNING_MESSAGE);
        }

这就是为什么通过适当的缩进正确而整齐地格式化代码非常重要。在Eclipse中(如果您正在使用它),您可以选择所有内容并点击ctrl + i(我认为)或cmnd + i,具体取决于您是使用PC还是Mac,它将正确格式化您的缩进。

话虽这么说,ifelse ifelse语句可能比你在这里做的要容易得多。

答案 1 :(得分:2)

您有两个else语句。 在顶层,您有ifelse和另一个else

应为ifelse if,最终条件为else。如果您要处理许多if语句,则每个if语句应为else if,因为else表示&#34;如果其他一切都不正确&#34;。< / p>

答案 2 :(得分:0)

您错过了 if 语句中的正确位置,正如其他答案已经提到的那样。为了防止这种恼人的错误,我建议以更易读的方式组织代码。对于你的情况,它可能是类似的(如果我正确地得到了逻辑):

public void validateInput() {

    final String name = qi.getEnteredName();
    final String password = qi.getEnteredPass();

    if (empty(name)) { 
        showWarn("Username Violation", "You did not enter a username. Please try again.");
    } else if (!registered(name)) {
        showWarn("Username Violation", "You are not registered.");
    } else if (empty(password)) {
        showWarn("Password Violation", "Your did not enter a password.");
    } else if (password.length < 6) {
        showWarn("Password Violation", "Your password must be at least six characters long.");
    } else {
        // we are good
        qi.getMainCards().next(qi.getPanels());
    }

}

private boolean registered(String name) {
     for(int i = 0; i < users.size(); i++) {
        if (name.equalsIgnoreCase(getUserList().get(i).getUsername())) {
            return true;
        }
     }  
     return false;
}

private void showWarn(String title, String message) {
    JOptionPane.showMessageDialog(null, 
        message, 
        title, JOptionPane.WARNING_MESSAGE);
}

private boolean empty(String string) {
    return string != null && !string.isEmpty();
}