gpt4 book ai didi

java - do while 循环中正确循环的问题 - Java

转载 作者:太空宇宙 更新时间:2023-11-04 12:47:02 25 4
gpt4 key购买 nike

我的程序似乎存在一些问题。我的导师建议我使用 do while 循环来保持程序运行。但是,当我输入无效密码并重新启动时,它会出错。当我输入有效密码时,它仅打印“有效密码”并且循环。我哪里出错了?

import java.util.Scanner;

public class CovenduniteProg5_FIX {

public static void main(String[] args) {
boolean passwordValid = false;

do {
boolean invalidLength = false;
boolean containsRestrictedWord = false;
boolean containsLowerCaseLetter = false;
boolean containsUpperCaseLetter = false;
boolean containsDigit = false;
boolean containsSpecialChar = false;

Scanner stdIn = new Scanner(System.in);

System.out.println("Password Verifier");
System.out.println("\nEnter a password that meets the following rules:\n" +
"\tIs at least 8 characters long\n" +
"\tContains at least 1 lower letter character\n" +
"\tContains at least 1 upper letter character\n" +
"\tContains at least 1 numberic digit\n" +
"\tContains at least 1 special character from the set: !@#$%^&*\n" +
"\tDoes not contain the word \"and\" or the word \"the\"\n");
System.out.print("Enter your password: ");
String password = stdIn.nextLine();

for (int i = 0; i < password.length(); i++) {
char ch = password.charAt(i);

if (Character.isUpperCase(ch) && !containsUpperCaseLetter) {
containsUpperCaseLetter = true;
}

if (Character.isLowerCase(ch) && !containsLowerCaseLetter) {
containsLowerCaseLetter = true;
}

if (Character.isDigit(ch) && !containsDigit) {
containsDigit = true;
}

if ((ch == '!' || ch == '@' || ch == '#' || ch == '$' || ch == '%' || ch == '^' || ch == '&' || ch == '*') && !containsSpecialChar) {
containsSpecialChar = true;
}
}

if (password.length() < 8 ) {
invalidLength = true;
}

if (password.contains("and") || password.contains("the")) {
containsRestrictedWord = true;
}

if (invalidLength) {
System.out.println("Invalid: Invalid length");
}

if (containsRestrictedWord) {
System.out.println("Invalid: Contains either the word \"and\" or \"the\".");
}

if (!containsDigit) {
System.out.println("Invalid: Does not contain at least one digit.");
}

if (!containsLowerCaseLetter) {
System.out.println("Invalid: Does not contain at least one lowercase letter.");
}

if (!containsUpperCaseLetter) {
System.out.println("Invalid: Does not contain at least one uppercase letter.");
}

if(!containsSpecialChar) {
System.out.println("Invalid: Does not contain at least one special character.");
}

if (containsSpecialChar && containsUpperCaseLetter && containsLowerCaseLetter && containsDigit && !containsRestrictedWord && !invalidLength)
passwordValid = true;

if (passwordValid)
System.out.print("\nPassword is valid.");

} while (!passwordValid);

passwordValid = false;

while(!passwordValid) {
if (passwordValid)
System.out.print("\nPassword is valid.");
}
}
}

最佳答案

我们不需要第二个 while 循环,它基本上是一个无限循环。此外,我们需要将“密码 validator ”语句移到 while 循环之外,因为它们不需要多次打印。因此,该方法将如下所示:

public static void main(String[] args) {

boolean passwordValid = false;
System.out.println("Password Verifier");
System.out.println("\nEnter a password that meets the following rules:\n" + "\tIs at least 8 characters long\n"
+ "\tContains at least 1 lower letter character\n" + "\tContains at least 1 upper letter character\n"
+ "\tContains at least 1 numberic digit\n"
+ "\tContains at least 1 special character from the set: !@#$%^&*\n"
+ "\tDoes not contain the word \"and\" or the word \"the\"\n");
do {
boolean invalidLength = false;
boolean containsRestrictedWord = false;
boolean containsLowerCaseLetter = false;
boolean containsUpperCaseLetter = false;
boolean containsDigit = false;
boolean containsSpecialChar = false;

Scanner stdIn = new Scanner(System.in);

System.out.print("Enter your password: ");
String password = stdIn.nextLine();

for (int i = 0; i < password.length(); i++) {
char ch = password.charAt(i);

if (Character.isUpperCase(ch) && !containsUpperCaseLetter) {
containsUpperCaseLetter = true;
}

if (Character.isLowerCase(ch) && !containsLowerCaseLetter) {
containsLowerCaseLetter = true;
}

if (Character.isDigit(ch) && !containsDigit) {
containsDigit = true;
}

if ((ch == '!' || ch == '@' || ch == '#' || ch == '$' || ch == '%' || ch == '^' || ch == '&'
|| ch == '*') && !containsSpecialChar) {
containsSpecialChar = true;
}
}

if (password.length() < 8) {
invalidLength = true;
}

if (password.contains("and") || password.contains("the")) {
containsRestrictedWord = true;
}

if (invalidLength) {
System.out.println("Invalid: Invalid length");
}

if (containsRestrictedWord) {
System.out.println("Invalid: Contains either the word \"and\" or \"the\".");
}

if (!containsDigit) {
System.out.println("Invalid: Does not contain at least one digit.");
}

if (!containsLowerCaseLetter) {
System.out.println("Invalid: Does not contain at least one lowercase letter.");
}

if (!containsUpperCaseLetter) {
System.out.println("Invalid: Does not contain at least one uppercase letter.");
}

if (!containsSpecialChar) {
System.out.println("Invalid: Does not contain at least one special character.");
}

if (containsSpecialChar && containsUpperCaseLetter && containsLowerCaseLetter && containsDigit
&& !containsRestrictedWord && !invalidLength)
passwordValid = true;

if (passwordValid)
System.out.print("\nPassword is valid.");

} while (!passwordValid);
}

关于java - do while 循环中正确循环的问题 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36211717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com