我似乎遇到了一些與我的程序有關的問題。我建議我的老師使用do while循環來保持程序運行。但是,當我輸入無效密碼並重新啓動時,它會出錯。當我輸入一個有效的密碼時,它只會打印「有效密碼」並且不是循環。我哪裏錯了?在while 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
順便說一句,那些「&&!」聲明並沒有真正做任何事情。沒有理由不讓它將真實值分配給真正的值。但是,對於教育,如果將它們放在相反的順序中,那實際上會做些什麼 - 如果第一個子句爲假,Java將不會計算&&操作的第二個子句。這裏沒有關係,但有時候這很有用。 –