【问题标题】:Password Validator密码验证器
【发布时间】:2015-02-14 22:19:14
【问题描述】:

我目前正在尝试使用布尔方法使密码验证器工作,因为老师要求我们这样做。这让我发疯。要正确,密码需要有一个大写字母、一个小写字母、至少 10 个字符和一个数字。我知道现在,我的方法完全返回值为 false,但我想知道一旦我有一个大写或一个小写,我怎么能破坏代码。

非常感谢您的帮助!

public class AtLeast1UppercaseLowercaseNumber {

public static void main(String[] args){
String password = "H";
System.out.println(password);
if(isSecurePassword(password)){
  System.out.println("Yay it works");}
else {
  System.out.println("you suck");}
}

public static isSecurePassword(String password) {
int uppercase = 0, lowercase = 0, number = 0;

 for(int i=0; i<password.length(); i++) {   
  for(char c ='A'; c <='Z'; c++) {        
    if(password.charAt(i) == c) {
      uppercase++;

      if( uppercase >= 1) {

  for(char t = 'a'; t <='z'; t++) {   
    if(password.charAt(i) == t) {
      lowercase++;
      if(lowercase >= 1) {

      }
    }
  }


  for(int j = '0'; j <='9'; j++) {
    if(password.charAt(i) == j) {
      number++;
      if( number >= 1) {

      }
    }
      }
  }
  return false;
  }
  }

【问题讨论】:

  • 这不是一个真正获得家庭作业帮助的地方。您是否查看过使用字符串、检查内容和长度的其他方法?想想许多循环是否真的是正确的方法(以及它理解起来有多复杂)。此外,请在提问时具体说明要求和对问题的描述。

标签: java methods boolean


【解决方案1】:

我建议您首先创建多个 privatestatic 测试方法,然后在您的 public isSecurePassword(String) 方法中委托它们。以boolean oneUpper(String)boolean oneLower(String)boolean oneDigit(String)boolean tenCharacters(String)等测试方法为例

private static boolean tenCharacters(String str) {
    return str.length() > 9;
}

还有第二个例子

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

那么你的isSecurePassword(String)就是

public static boolean isSecurePassword(String str) {
    return tenCharacters(str) && oneUpper(str) && oneLower(str)
            && oneDigit(str);
}

【讨论】:

  • 非常感谢!我创建了其他方法,但程序告诉我他找不到字符。我错过了什么吗?
  • @Suligane java.lang.Characterjava.lang 包中。
【解决方案2】:

由于这个方法只有一个return,显式返回false,所以这个方法总是返回false。

方法一: 定义一个布尔值,它将在方法的最后一条语句中返回。此布尔值默认为 true,如果一个条件错误,将设置为 false。

方法二: 最后一条语句是隐式的 return true 语句,只要条件未满足,则返回 false。这将阻止该方法执行更多测试。

方法三: 让方法看起来像这样

if (containsUpperCase(string) && contains...)
    return true;
return false;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2015-12-11
    • 2011-01-24
    • 1970-01-01
    相关资源
    最近更新 更多