嘿伙计们,我正在为一个类编写这段代码,但我不知道我搞砸了什么。我确信它很简单,所以如果你能看看我并帮助我解决我的错误。
背景:这应该检查一个单词,以确保它包含一个标点符号、一个大写字母和一个小写字母,以及前 8 位数字中的数字。
当我在 netbeans 中单步执行它时,for 循环只会转到第二个 if 语句,然后返回到顶部并再次迭代。它不会输入有关 numFlag
或 upperFlag
和 lowerFlag
的 if 语句
我有这些 if 语句检查标志是否为真,这样如果我已经检测到相应的字符类型,它就不会输入并继续。
它确实可以编译并运行,如果您想编译和测试它,我也包含了我用来测试的主要方法,以方便使用
也欢迎任何其他建议。如果我没有提供足够的信息,请告诉我您需要什么。
有问题的代码:
public final class Checker {
private Checker() {}
public static boolean checkLegality(String _pass) {
boolean puncFlag = false;
boolean numFlag = false;
boolean upperFlag = false;
boolean lowerFlag = false;
char[] pass = _pass.toCharArray();
if (pass.length < 8) {
return false;
}
for (int i = 0; i < 9; i++) {
if (!puncFlag) {//enters check for puncuation only if it hasint detected any yet
int ascii = (int) pass[i];//converts to ascii
if (32 < ascii && ascii < 47) {
puncFlag = true;
}
} else if (!numFlag) {//enters check for numbers only if it hasint detected any yet
if (Character.isDigit(pass[i])) {
numFlag = true;
}
} else if (!upperFlag || !lowerFlag) {//enters check for letters only if it hasint detected both upper and lower yet
if (Character.isLetter(pass[i])) {
if (Character.isUpperCase(pass[i])) {//checks if upper case
upperFlag = true;
} else if (Character.isLowerCase(pass[i])) {
lowerFlag = true;
}
}
}
}
if (puncFlag
&& numFlag
&& upperFlag) {
return true;
} else {
return false;
}
}
}
我用来测试的主要方法
public class PasswordCheckermMain {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//TO DO CODE HERE
Scanner in = new Scanner(System.in);
String pass;
boolean flag = false;
while (flag == false) {
System.out.println("Enter password: ");
pass = in.next();
if(Checker.checkLegality(pass)){
flag = true;
}
System.out.println("The password meets criteria: " + flag);
}
}
}
最佳答案
您不应该在 else-if
中进行测试,因为除非完成前面的检查,否则所有检查都不会完成。
例如
if (!puncFlag) {//enters check for puncuation only if it hasint detected any yet
...
}
if (!numFlag) {//enters check for numbers only if it hasint detected any yet
...
}
if (...)
旁注,你不必这样做
if (32 < ascii && ascii < 47) {
这会起作用
if (' ' < pass[i] && pass[i] < '/') {
关于Java 循环和 If else 语句未完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35487013/