【发布时间】:2017-05-17 18:52:28
【问题描述】:
import java.util.Scanner;
public class Exercise6_18 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Password rules:\n"
+ "Password must have at least eight characters\n"
+ "Password must consist of only letters and digits\n"
+ "Password must contain at least two digits\n"
+ "Enter a password:");
String pWT = sc.next();
passWordIsValid(pWT);
}
public static void passWordIsValid (String password) {
boolean passWordIsValid;
if (password.length() < 8) {
passWordIsValid = false;
}
else if (password.indexOf(0) == -1 && password.indexOf(1) == -1
&& password.indexOf(2) == -1 && password.indexOf(3) == -1
&& password.indexOf(4) == -1 && password.indexOf(5) == -1
&& password.indexOf(6) == -1 && password.indexOf(7) == -1
&& password.indexOf(8) == -1 && password.indexOf(9) == -1) {
passWordIsValid = false;
}
else
passWordIsValid = true;
if (passWordIsValid == true)
System.out.print("Password is valid");
else if (passWordIsValid == false)
System.out.println("Password is invalid");
}
}
我正在尝试编写一个程序,提示用户输入至少 8 个字符长、至少包含两位数字且仅由字母和数字组成的密码,但是当我输入时:password12 它说密码无效.附言我知道我没有在方法中添加至少两位数的要求。
【问题讨论】:
-
试试
password.indexOf("0") == -1 ....。您要查找字符串0,而不是代码点0 -
非常感谢,我不敢相信我没有注意到这一点!
-
另外,尝试手动遍历算法,您会在 passwordIsValid() 的第一个 else 块中发现逻辑错误。如果您的密码包含“1”,则 index("1 ") 将返回一个正数,因此测试将是错误的。
-
假设密码 > 8 个字符,例如
ABCDEFGHIJKLMNOP12或ABCDEFGHIJKLMNOP12#。考虑使用循环来检查每个字符。