加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 线程“main”StackoverFlow错误中的异常

发布时间:2020-12-15 08:49:54 所属栏目:Java 来源:网络整理
导读:我正在编写一个程序来验证密码是否符合相应的要求.我已经编写了所有代码,我觉得它应该可以工作,但是我收到以下错误: Exception in thread "main" java.lang.StackOverflowErrorat java.lang.String.length(String.java:623)at PasswordVerifier.isValid(Pas
我正在编写一个程序来验证密码是否符合相应的要求.我已经编写了所有代码,我觉得它应该可以工作,但是我收到以下错误:

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),这导致无限循环递归.

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

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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读