我想编写一个程序来检查插入的密码:
我写了这个程序,但它并没有给我正确的输出:
import java.util.Scanner;
public class Question5 {
public static void main(String[] args) {
Scanner in = new Scanner (System.in);
System.out.println("Please enter your password: ");
String input = in.nextLine();
boolean flag = validate(input);
if (flag = true) {
System.out.println("password verified");
}
else {
System.out.println("not a good password");
}
}
public static boolean validate(String input) {
boolean flag = false;
int uppercaseCounter = 0;
int lowercaseCounter = 0;
int digitCounter = 0;
int letterCounter = 0;
for (int i = 0; i<(input.length()); i++) {
int totalCounter = digitCounter + letterCounter;
if (totalCounter >= 8 && digitCounter >= 3 && uppercaseCounter > 0 && lowercaseCounter > 0) {
flag = true;
}
else {
if (Character.isDigit(i)) {
digitCounter++;
}
if (Character.isLetter(i)) {
letterCounter++;
}
if (Character.isUpperCase(i)) {
uppercaseCounter++;
}
if (Character.isLowerCase(i)) {
lowercaseCounter++;
}
}
}
return flag;
}
}
有人可以帮我吗?非常感谢你!
答案 0 :(得分:0)
您实际上正在检查各种if中的i
计数器而不是输入字符串......
使用类似
的内容char c = s.charAt(i);
并检查输入字符
此外,您应该使用if(flag = true)
if(flag)
答案 1 :(得分:0)
这是捕获:
if (flag = true)
{
System.out.println("password verified");
}
=
是一个赋值运算符 ==
是关系运算符。要解决此问题,请执行flag==true
。
此外,在您的方法中,您要比较i
,这是计数器,而不是
char
i
。这样做
if(Character.isDigit(input.charAt(i))){ //Do this for all Character.isSomething() Methods
所有支票。
答案 2 :(得分:0)
更改
if (flag = true)
{
System.out.println("password verified");
}
else
{
System.out.println("not a good password");
}
到
if (flag)
{
System.out.println("password verified");
}
else
{
System.out.println("not a good password");
}
当您编写if(flag=true)
时,您正在执行赋值操作而不是相等比较。
此外,逻辑应为Character.isDigit(input.charAt(i))
,因为您要检查i
处的字符,而不是i
本身。
总而言之,我想说使用Regular Expressions
来解决这个问题会很有趣。查看Java中正则表达式的this教程。
答案 3 :(得分:0)
除了其他答案之外,此代码应移至计数器增量以下:
int totalCounter = digitCounter + letterCounter;
if (totalCounter >= 8 && digitCounter >= 3 && uppercaseCounter > 0 && lowercaseCounter > 0) {
flag = true;
}
否则,当您的密码在最后一个字符上生效时,您将面临返回false的风险。