我想检查密码是否至少包含8个字符,并且仅包含数字和字母。 这里的问题是即使我输入了有效的密码,它始终显示“无效”。这是代码。感谢。
public static void main(String[] args)
{
String pw;
Scanner sc = new Scanner(System.in);
System.out.print("Enter a password: ");
pw = sc.next();
if(isValid(pw)==true)
{
System.out.println("Valid Password");
}
else
{
System.out.println("Invalid Password");
}
}
public static boolean isValid(String pw)
{
if(pw.length()<8)
{
return false;
}
else
{
for(int x=0; x<pw.length(); x++)
{
return Character.isLetterOrDigit(pw.charAt(x));
}
}
return true;
}
}
答案 0 :(得分:3)
除了isValid方法中'for'循环中的return语句外,代码的逻辑是正确的。这是编辑的代码:
public static void main(String[] args)
{
String pw;
Scanner sc = new Scanner(System.in);
System.out.print("Enter a password: ");
pw = sc.next();
if(isValid(pw))
{
System.out.println("Valid Password");
}
else
{
System.out.println("Invalid Password");
}
}
public static boolean isValid(String pw)
{
if(pw.length()<8)
{
return false;
}
else
{
for(int x=0; x<pw.length(); x++)
{
if(!Character.isLetterOrDigit(pw.charAt(x)))
return false;
}
}
return true;
}
请注意,如果您的密码有效,您的代码不会打印“无效”,但对于某些无效密码(例如@@@@@@@@
)可能会打印“有效”答案 1 :(得分:2)
您在循环的第一次迭代中返回结果,而应该创建一个标志变量并在循环结束时返回结果,或者您可以在循环内反转if
条件如果计算结果为 true ,则返回 false ,如果没有,则返回 true 。
public static boolean isValid(String password){
if(password.length() < 8)
return false;
for(int x = 0; x < password.length(); x++)
if(!Character.isLetterOrDigit(password.charAt(x)))
return false;
return true;
}