【问题标题】:PassWord checker, How to list all problems at once?密码检查器,如何一次列出所有问题?
【发布时间】:2017-11-06 06:18:59
【问题描述】:

所以最近我一直在编写这个密码检查器,我几乎完成了。对于我的密码检查器,有一些要求。

  • 大于 8 个字符
  • 少于 20 个字符
  • 必须使用 @ 符号和下划线
  • 还必须包含数字,不能使用名字或姓氏

我已经成功地编写了所有这些代码,现在我只需编写一个代码,它会一次性列出所有未满足的要求,而不是一一列出。此外,当密码可以接受并且所有要求都已满足时。我感谢任何帮助,谢谢伙计们

import java.util.Scanner;

public class PasswordChecker {
  public static void main(String[] args) {
    Scanner james = new Scanner(System.in);
    System.out.println("Hi there, Welcome to Password Heavean where we have the hardest password combinations on this easrth and any other earth.");
    System.out.println("Take note your password must be longer than 8 and less than 20 characters, Can not have your first or last name, must use a @ sign, must have a number and use at leaast 3 capitals");
    System.out.println("First please input you first name.");
    String passWord;
    String firstName;
    String lastName;
    String firstNameLower;
    String lastNameLower;
    String passWordLower;
    firstName = james.nextLine();
    firstNameLower = firstName.toLowerCase();
    System.out.println("Also please input you Last name.");
    lastName = james.nextLine();
    lastNameLower = lastName.toLowerCase();
    System.out.println("Please enter your password now");
    passWord = james.nextLine();
    passWordLower = passWord.toLowerCase();
    if (passWordLower.length() < 9) {
      while (passWordLower.length() > 20) {
        System.out.println("Sorry but your password is greater than or equal too 20 characters, please try a differnent password");
        passWord = james.nextLine();
      }
    }
    if (passWordLower.indexOf(firstNameLower) != -1 || (passWordLower.indexOf(lastNameLower) != -1)) {
      System.out.println("Sorry but you can not use your first or your last name in the password. ");
    }
    if (passWordLower.contains("@")) {} else {
      System.out.println("Sorry but you must use a @ symbol in your password.");
    }
    if (passWordLower.contains("_")) {} else {
      System.out.println("Sorry but you must use a underscore in your password.");
    }
    int counter = 0;
    for (int i = 0; i < passWordLower.length(); i++) {
      if (Character.isDigit(passWordLower.charAt(i))) {
        counter++;
      }
    }
    if (counter < 3) {
      System.out.println("Sorry but you need to have at least 3 numbers in your password.");
    }
  }
}

【问题讨论】:

  • 对不起,还是有点知道不知道如何正确插入看起来不错的代码。但我不认为那样看起来太糟糕了
  • if (passWordLower.contains("@")) {} else { 可以替换为if (!passWordLower.contains("@")) {
  • 使用字符串缓冲区并将所有消息附加到 if 块中,最后一次全部打印出来。
  • 谢谢,Shmosel。为我节省了一些额外且不需要的代码
  • 我想我可以在它周围放一个大的while循环,但我不太确定。?

标签: java passwords


【解决方案1】:

试试这样的,

 StringBuffer errorMgs = new StringBuffer();

    errorMgs.append("Sorry !! ");

    if (passWordLower.length() < 9) {
        errorMgs.append("your password must have minimum 9 characters \nand");
    }
    else if (passWordLower.length() > 20) {
        errorMgs.append("your password is greater than or equal too 20 characters \nand");
    }
    if (passWordLower.indexOf(firstNameLower) != -1 || (passWordLower.indexOf(lastNameLower) != -1)) {
        errorMgs.append(" you can not use your first or your last name \nand");
    }
    if (!passWordLower.contains("@")) {
        errorMgs.append(" you must use a @ symbol \nand");

    }
    if (!passWordLower.contains("_")) {
        errorMgs.append(" you must use a underscore \nand");
    }
    int counter = 0;
    for (int i = 0; i < passWordLower.length(); i++) {
        if (Character.isDigit(passWordLower.charAt(i))) {
            counter++;
        }
    }
    if (counter < 3) {
        errorMgs.append(" you need to have at least 3 numbers");
    }

    if (!errorMgs.toString().equals("Sorry !! ")) { //identify given password met all criterias or not   
        errorMgs.append(" in your password.");
        System.out.println(errorMgs);
    } else {
        System.out.println("your password accepted");
    }

你的输出将是这样的,

您好,欢迎来到 Password Heavean,这是我们最难的地方 这个地球和任何其他地球上的密码组合。记笔记 您的密码必须长于 8 个字符且少于 20 个字符,可以 没有您的名字或姓氏,必须使用 @ 符号,必须有 编号并使用至少 3 个大写字母

首先请输入你的名字。

jhone

另外请输入您的姓氏。

彼得

请立即输入您的密码

sld4f

对不起!!您必须使用 @ 符号并且必须使用下划线和 您的密码中至少需要包含 3 个数字。

【讨论】:

  • 只是好奇有什么办法可以摆脱 and 并换行吗?
  • 然后使用System.lineSeparator() 而不是\n
  • 我试过了,但是当你超过 20 个字符时它没有工作。
  • 我觉得像这样的 di** 再问你,但如果你有 30 秒的时间不要浪费时间在上面,我怎么能让程序在密码失败后重新启动,他们可以在哪里再试一次
【解决方案2】:

我也只用 while 块更改了 if+while 块

while (passWord.length() < 9 || passWord.length() > 20) {
  System.out.println("Sorry but your password is greater than or equal too 20 characters, please try a differnent password");
  passWord = james.nextLine();
}
passWordLower = passWord.toLowerCase();

String errorMessage = "";
if (passWordLower.indexOf(firstNameLower) != -1 || (passWordLower.indexOf(lastNameLower) != -1)) {
  errorMessage += "Sorry but you can not use your first or your last name in the password. " + System.lineSeparator();
}
if (passWordLower.contains("@")) {} else {
  errorMessage += "Sorry but you must use a @ symbol in your password." + System.lineSeparator();
}
if (passWordLower.contains("_")) {} else {
  errorMessage += "Sorry but you must use a underscore in your password." + System.lineSeparator();
}
int counter = 0;
for (int i = 0; i < passWordLower.length(); i++) {
  if (Character.isDigit(passWordLower.charAt(i))) {
    counter++;
  }
}
if (counter < 3) {
  errorMessage += "Sorry but you need to have at least 3 numbers in your password." + System.lineSeparator();
}

System.out.println(errorMessage);

我不认为你会注意到差异,它打印得太快了

【讨论】:

    猜你喜欢
    • 2016-12-04
    • 2017-01-08
    • 2014-11-08
    • 1970-01-01
    • 2021-01-30
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多