java - 线程 "main"StackoverFlow 错误中的异常

标签 java class

我正在编写一个程序来验证密码是否满足适当的要求。我已经编写了所有代码,我觉得它应该可以工作,但是我收到以下错误:

Exception in thread "main" java.lang.StackOverflowError
at java.lang.String.length(String.java:623)
at PasswordVerifier.isValid(PasswordVerifier.java:5)
at PasswordVerifier.isValid(PasswordVerifier.java:6)

然后它重复错误的最后一行相当长一段时间。我一直在环顾四周,似乎无法弄清楚我的问题。我知道某些东西一直在循环播放,但我不想这样做,但我无法解决这个问题。这是我的代码

 public class PasswordVerifier{
  private static int MIN_PASSWORD_LENGTH = 6;

  public static boolean isValid(String str){
     if (str.length() >= MIN_PASSWORD_LENGTH){
        if (PasswordVerifier.isValid(str) == true){
           if (PasswordVerifier.hasUpperCase(str) == true){
              if (PasswordVerifier.hasLowerCase(str) == true){
                 if (PasswordVerifier.hasDigit(str) == true){
                    return true;
                 }
              }
           }
        }
     }
        return false;
  }

  private static boolean hasUpperCase(String str){
     for (char c : str.toCharArray()){
        if (Character.isUpperCase(c)){
           return true;
        }
     }
     return false;
  }

  private static boolean hasLowerCase(String str){
     for (char c : str.toCharArray()){
        if (Character.isLowerCase(c)){
           return true;
        }
     }
     return false;
  }

  private static boolean hasDigit(String str){
     for (char c : str.toCharArray()){
        if (Character.isDigit(c)){
           return true;
        }
     }
     return false;
  }
 }

如有任何帮助,我们将不胜感激!

最佳答案

public static boolean isValid(String str){
    // ...
        if (PasswordVerifier.isValid(str) == true){
        // ...
        }
    // ...
}

您从自身内部调用 isValid(String),这会导致无限的 loop 递归。

我要大胆猜测一下,然后说这是你想要的:

public static boolean isValid(String str){
    if (str.length() >= MIN_PASSWORD_LENGTH){
        // Removed call to .isValid(String)
        if (PasswordVerifier.hasUpperCase(str)){
            if (PasswordVerifier.hasLowerCase(str)){
                if (PasswordVerifier.hasDigit(str)){
                    return true;
                }
            }
        }
    }
    return false;
}

关于java - 线程 "main"StackoverFlow 错误中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14531250/

相关文章:

java - 如何使用 CDI 在 ajax 调用期间保持状态

java - chromedriver 未在 Java 中实例化

java - 无法访问的代码 while 循环

C++ 静态类成员初始化

java - AdMob 覆盖了我的 EditText 和 TextView

java - 启动时无法加载data.sql资源文件

python - 如何测试python类父类是否定义了方法?

c++ - 定义函数

c++ - 对象组合 C++ : no matching function for call

c++ - 下面的程序在 C++ 中如何工作?