私のプログラムにいくつか問題があるようです。インストラクターがdo whileループを使用してプログラムを実行し続けることを勧めました。しかし、無効なパスワードを入力して再起動するとエラーになります。有効なパスワードを入力すると、「有効なパスワード」のみが表示され、ではなく、ループになります。どこが間違っていたのですか?do whileループで適切なループが発生する問題 - Java
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: [email protected]#$%^&*\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.");
}
}
}
が、これは "無効"、パスワードのいずれかの種類のために発生することができますされていますか? –
私は前にそれをやるために何をしたのか分かりません。私はそれを複製するように見えることはできません。 "無効な"パスワードを入力した場合にのみ、ループとして機能しているようです。有効なパスワードを入力すると、最初のメニューに戻りません。 – asfsafafaffwqfqwfwqqwg
Btw、それらの "&&!"ステートメントは実際に何もしていません。すでに真の値を真に割り当てることができない理由はありません。しかし、教育の場合、それらを逆の順序に置くと、実際に何かが行われます.Javaは、最初の句がfalseの場合、&&操作の2番目の句を計算しません。これはここでは関係ありませんが、便利な場所があります。 –