Java 循环和 If else 语句未完成

标签 java if-statement for-loop

嘿伙计们,我正在为一个类编写这段代码,但我不知道我搞砸了什么。我确信它很简单,所以如果你能看看我并帮助我解决我的错误。

背景:这应该检查一个单词,以确保它包含一个标点符号、一个大写字母和一个小写字母,以及前 8 位数字中的数字。

当我在 netbeans 中单步执行它时,for 循环只会转到第二个 if 语句,然后返回到顶部并再次迭代。它不会输入有关 numFlagupperFlaglowerFlag 的 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/

相关文章:

r - R 中 `ifelse` 的更通用版本?

java - 声明数组长度,JAVA

java - 在 macOS (Mac OS X) 上打印 Java 类路径

java - java字符串中的内存管理?

java - 简化 if 语句

c++ - 基于范围的for循环将对象 move 到另一个容器中?

用于计算的 Javascript for 循环

java - HTML 抓取我拥有其身份验证详细信息的网站

java - 对于银行应用程序来说,SQL 事务或 Java 端事务哪个更好?

java - make if 只检查一个命令