密码验证程序

时间:2017-04-10 14:59:45

标签: java

我想编写一个程序来检查插入的密码:

  • 长度最小为8
  • 至少1个大写字母
  • 至少1个小写字母
  • 至少3位数

我写了这个程序,但它并没有给我正确的输出:

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;
    }
}

有人可以帮我吗?非常感谢你!

4 个答案:

答案 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的风险。