В вашем цикле while
есть:
while(mStringPasscode.matches("\\D+")
Вы хотите, чтобы оно было:
while(!mStringPasscode.matches("\\d+")
Объяснение:
\\D+
соответствует не цифрам, но это будет соответствовать, только если весь String
не является цифрой.Вы хотите использовать \\d+
, который будет возвращать false, если любой из символов в String
не является числовым.String#matches
соответствует целому String
, поэтому, если есть один символ, который не соответствует, он вернет false.
while(!mStringPasscode.matches("\\d+") || mStringPasscode.length() != 3)
{
System.out.print("Error! You inputted an invalid passcode, try again: ");
mStringPasscode = sc.nextLine(); // Prints error, gets user to input again
}
Пример вывода:
Enter your desired numerical passcode (max 3 digits): 34f
Error! You inputted an invalid passcode, try again: fff
Error! You inputted an invalid passcode, try again: 45645323
Error! You inputted an invalid passcode, try again: ff
Error! You inputted an invalid passcode, try again: 456
You've set the numerical passcode to 456