密码验证器java:链接布尔值?

时间:2012-02-20 01:24:44

标签: java

几周前我刚刚开始使用java,我正在尝试制作一个程序来验证密码是否至少为10个字符,每个至少有一个:大写,小写,数字,并且只是字母数字字符。

以下是我到目前为止的代码。它实际上比英文代码更英文,但我想要做的是在一个布尔下运行几个循环(至少这是我认为我正在做的)。你能帮助我理解布尔运算是如何工作的,以及是否有可能在一个布尔值下测试几个条件,正如我在下面尝试的那样?

谢谢!

public class validatingPassword
{
public static void main(String[] args) 
{
String password= isSecurePassword("testcase");
System.out.println(isSecurePassword);
}

public static boolean isSecurePassword(String password)
{   
password.charAt(x);
int lengthPassword= password.length(); 
if (lengthPassword < 10);
return false; 

for (int x = 0; x < lengthPassword; x++)
        {
    if ('A' <=x && x <= 'Z');}
    else if 
    return false;

    for (int x = 0; x< lengthPassword; x++) 
            {
        ('a' <=x && x <= 'z'); }
        else if 
        return false:

        for (int x = 0; x < lengthPassword; x++) 
                {
            ('0' <=x && x <= '9');}
            return true;  
                }
    else if
    {
    x++;
    return false;
    }
    }
}

2 个答案:

答案 0 :(得分:1)

我只是给出了未记录的正确代码。因为我认为你有正确的想法,但缺少一些Java语法。您可以通过所有命令单步调试代码。

public class ValidatingPassword {

    public static void main(String[] args) {
        String[] passwords = { "testcase", "T3stCas3%45" };
        for (String password : passwords) {
            System.out.println(password + " : " + isSecurePassword(password));
        }
    }

    /**
     * Is this a secure password?
     * At least 10 characters, at least one capital letter, one small
     * letter and one digit.
     * 
     * @param password never null.
     * @return whether password is secure.
     */
    public static boolean isSecurePassword(String password) {

        int lengthPassword = password.length();
        if (lengthPassword < 10) {
            return false;
        }

        boolean hasCapital = false;
        boolean hasSmallLetter = false;
        boolean hasDigit = false;
        for (int i = 0; i < lengthPassword; i++) {
            char ch = password.charAt(i);
            if ('A' <= ch && ch <= 'Z') {
                hasCapital = true;
            }
            if ('a' <= ch && ch <= 'z') {
                hasSmallLetter = true;
            }
            if ('0' <= ch && ch <= '9') {
                hasDigit = true;
            }
        }
        return hasCapital && hasSmallLetter && hasDigit;
    }
}

答案 1 :(得分:0)

是的,可以嵌套布尔语句......但是你的护腕都搞砸了。

你有:

for (int x = 0; x < lengthPassword; x++){
if ('A' <=x && x <= 'Z');}
else if {
return false;

应该看起来更像:

    for (int x = 0; x < lengthPassword; x++)
    {
        if ('A' <=x && x <= 'Z') {
            // Do nothing
        }
        else {
            return false;
        }
    }

如果你使用else,它会期望一个条件语句,所以你只想使用需要在for语句中的else以及if。

你也不需要增加x,因为这是由for循环完成的。

您也可以将它们全部合并到一个for语句中,而不是将每个语句组合在一起:

    for (int x = 0; x < lengthPassword; x++)
    {
        if ('A' <=x && x <= 'Z') {
            // Do nothing
        }
        else {
            return false;
        }
        if ('a' <=x && x <= 'z') {
            // Do nothing
        }
        else {
            return false;
        }       
        if ('0' <=x && x <= '9') {
            // Do nothing
        }
        else {
            return false;
        }
    }

我甚至不确定你要做的事情是否会奏效。如果我试图这样做,我会用正则表达式来做。

使用缩进确实有帮助。