这是我的代码:
import java.util.*;
import java.lang.String;
import java.lang.Character;
public class password {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Please enter a Password: ");
String password = input.next();
if (isValid(password))
{
System.out.println("valid Password");
System.out.print("Please verify your Password: ");
String vrfypassword = input.next();
if (vrfypassword.equals(password)){
System.out.println("Password Verfied");
} else {
System.out.println("Unable to verify password");
}
}
else
{
System.out.println("InValid Password");
}
}
public static boolean isValid(String password) {
if (password.length() < 10) {
return false;
} else {
char c;
int count = 1;
for (int i = 0; i < password.length() - 1; i++) {
c = password.charAt(i);
if (!Character.isLetterOrDigit(c)) {
return false;
} else if (!Character.isDigit(c))
return false;
}
}
return true;
}
}
我不确定为什么,但即使我使用“应该”通过的密码,它总是返回一个无效的密码。要求少于10个字符,一个字母和一个数字。我有什么不对的吗?
答案 0 :(得分:0)
if (password.length() < 10) { return false; }
要求少于10个字符
您的要求未反映在代码中。
反转声明:
if (password.length() > 10) { return false; }
而且:
if (!Character.isDigit(c)) { return false; }
诅咒:
要求少于10个字符,一个字母和一个数字
离开这张支票。
试试这个:
public static boolean isValid(String password) {
if (password.length() < 10) {
return false;
} else {
char c;
int digitCount, letterCount;
for (int i = 0; i < password.length(); i++) {
c = password.charAt(i);
if (Character.isLetter(c)) {
letterCount++;
} else if (Character.isDigit(c))
digitCount++;
}
if(digitCount < 1 || lettercount < 1) { return false; }
}
return true;
}
答案 1 :(得分:0)
问题是,只要密码中有字母,它就会返回false
,因为这句话:
...
else if (!Character.isDigit(c)){
System.out.println("H2");
return false;
}
答案 2 :(得分:0)
更改此
if (!Character.isLetterOrDigit(c)) {
return false;
} else if (!Character.isDigit(c))
return false;
}
到
if (!Character.isLetterOrDigit(c)) {
return false;
}
答案 3 :(得分:0)
检查您是否正在从输入中读取\ r或\ n。 这既不是数字,也不是字母,可能会破坏事物。
这也是正确的:
i < password.length() - 1
不应该是:
i < password.length()