所以我之前很难遵循方法,我回来添加另一个缩进的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);
}
}
}
}
答案 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,它将正确格式化您的缩进。
话虽这么说,if
,else if
和else
语句可能比你在这里做的要容易得多。
答案 1 :(得分:2)
您有两个else
语句。
在顶层,您有if
,else
和另一个else
。
应为if
,else 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();
}