如何修复字符串中的布尔方法

时间:2019-05-09 17:19:27

标签: java

想象一下,您正在为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

1 个答案:

答案 0 :(得分:1)

您已经创建了一个while循环来循环遍历两个位置的行:在main方法中和在test方法中。 test方法正在消耗所有输入,而main循环只剩下任何内容。

您已经正确地将password传递给test;只是while中没有test循环。

您无需在每个循环中检查密码长度;只需在字符for循环之前对其进行一次测试。

字符不能同时为大写,小写,数字,&&)空格。您需要测试它是大写,小写还是||)一个数字,这将使其不是空格。

现在,如果有任何字符符合条件,则将valid设置为true。要使所有字符都满足要求的情况下validtrue,请将valid初始化为true,如果当前字符为false不符合要求。

您还可以根据您的确切要求决定完全不测试空行。