想象一下,您正在为Amazon.com开发一个软件包,该软件包要求用户输入自己的密码。您的软件要求用户的密码必须满足以下要求:密码至少应包含8个字符。密码应至少包含一个大写字母和至少一个小写字母。密码至少应包含一位数字。密码不能包含空格 编写一个程序来验证密码是否有效。
这是我的代码:
import java.io.*;
import java.util.Scanner;
public class assignment7{
public static boolean test(String password,Scanner input){
boolean valid=false;
while(input.hasNextLine()){
password=input.nextLine();
for(int i=0;i<password.length();i++){
char c=password.charAt(i);
if((password.length()>=8)&&
(Character.isUpperCase(c))&&
(Character.isLowerCase(c))&&
(Character.isDigit(c))&&
(Character.isWhitespace(c)))
valid=true;
}
}
return valid;
}
public static void main(String[]args)throws FileNotFoundException{
Scanner input=new Scanner(new File("password.txt"));
String password;
while(input.hasNextLine()){
password=input.nextLine();
System.out.println(password.trim());
boolean isvalid=test(password,input);
if(isvalid)
System.out.println("This is a valid password: "+password+"\n");
else
System.out.println("This is a invalid password: "+password+"\n");
}
System.out.println("This program prcoessed all data");
input.close();
}
}
为什么我的代码只读取第一个密码并停止执行?再加上我的密码是正确的,但它仍然会打印出无效的密码?
我的输入文件是:
asdF1k12
Mzj1kada45
jKl123oin
答案 0 :(得分:1)
您已经创建了一个while
循环来循环遍历两个位置的行:在main
方法中和在test
方法中。 test
方法正在消耗所有输入,而main
循环只剩下任何内容。
您已经正确地将password
传递给test
;只是while
中没有test
循环。
您无需在每个循环中检查密码长度;只需在字符for
循环之前对其进行一次测试。
字符不能同时为大写,小写,数字,和(&&
)空格。您需要测试它是大写,小写还是或(||
)一个数字,这将使其不是空格。
现在,如果有任何字符符合条件,则将valid
设置为true
。要使所有字符都满足要求的情况下valid
为true
,请将valid
初始化为true
,如果当前字符为false
不符合要求。
您还可以根据您的确切要求决定完全不测试空行。