Java ....为输入中的每个字符打印1个错误

时间:2016-02-11 18:52:30

标签: java eclipse if-statement do-while

我是一名新手Java程序员,我正在尝试制作一个非常基本的用户名/密码程序。它的用户名部分工作正常,但是当我得到密码时,它给了我一些奇怪的问题。我想出了例如当它检查一个大写字母时,如果它找到一个好的,但如果它没有,它会为密码中的每个字符打印错误消息。它通过数字检查和长度检查来完成。如果你们中的任何一个人能够向我解释这一点,因为我还是Java的新手,那就太棒了。谢谢!

do
    {
        if (count3 >0)
        {
            System.err.println("- At least 1 Uppercase");
            System.err.println("- At least 1 number");
            System.err.println("- At least 7 characters long.");
        }
        regPassword = input.nextLine();
        regPasswordLen = regPassword.length();
        for(int count = 0; count < regPasswordLen; count++)
        {
                if(Character.isUpperCase(regPassword.charAt(count)))
                    regPasswordUppercaseCheck = true;

                    else
                    {
                        System.err.println("Your password did not contain an Uppercase letter");
                    regPasswordUppercaseCheck = false;
                    }

                if(regPassword.contains("1") || regPassword.contains("2") ||
                        regPassword.contains("3") || regPassword.contains("4") ||
                        regPassword.contains("5") || regPassword.contains("6") ||
                        regPassword.contains("7") || regPassword.contains("8") ||
                        regPassword.contains("9") || regPassword.contains("0"))
                    regPasswordNumCheck = true;

                    else
                    {
                        System.err.println("Your password did not contain at least 1 number.");
                    regPasswordNumCheck = false;
                    }

                if (regPasswordLen >=7)
                    regPasswordLengthCheck = true;

                    else
                    {
                        System.err.println("Your password did not meet the minimum length requirements.");
                    regPasswordLengthCheck = false;
                    }
        }
    count3++;
    }
    while(!regPasswordUppercaseCheck || !regPasswordNumCheck || !regPasswordLengthCheck); 

    System.out.println("test");

3 个答案:

答案 0 :(得分:1)

  1. 您每次都使用相同的变量&#34; if和else&#34;对于每个不同的字符,即 regPasswordUppercaseCheck ,如果输入的每个字符都是大写,除了最后一个字符,该变量将包含false。
  2. 我认为您使用count3来确保内部代码将单次运行,但如果while为false且count3条件仍为true,则代码将陷入无限循环。
  3. 使用 while(regPasswordUppercaseCheck&amp;&amp; regPasswordNumCheck&amp;&amp; regPasswordLengthCheck); 为简单起见。

答案 1 :(得分:0)

您可以在程序中更改一些内容。

do
{
    if (count3 >0)
    {
        System.err.println("- At least 1 Uppercase");
        System.err.println("- At least 1 number");
        System.err.println("- At least 7 characters long, but no more than 15 characters.");
    }
    regPassword = input.nextLine();
    regPasswordLen = regPassword.length();

    // this check only needs to happen once per password, no need to check it in the for loop. You also specified that the length should not exceed 15 characters, so I threw that in as well
    if (regPasswordLen < 7 || regPasswordLen > 15)
         System.err.println("Your password did not meet the length requirements.");
    // by default, we set these flags to false, and only make them true if the requirements are satisfied
    regPasswordUppercaseCheck = false;
    regPasswordNumCheck = false;

    for(int count = 0; count < regPasswordLen; count++)
    {
            // store the value of regPassword.charAt(count) in a local variable for reusability
            char current = regPassword.charAt(count);

            if(Character.isUpperCase(current))
                regPasswordUppercaseCheck = true;

            // checks if the character is a digit or not
            if(current >= '0' && current <= '9')
                regPasswordNumCheck = true;
    }

    if (!regPasswordNumCheck)
        System.err.println("Your password did not contain at least 1 number.");
    if (!regPasswordUppercaseCheck)
        System.err.println("Your password did not contain an Uppercase letter");

count3++;
}
while(!regPasswordUppercaseCheck || !regPasswordNumCheck || !regPasswordLengthCheck);

答案 2 :(得分:0)

你的大写检查是不正确的,因为循环 for(int count=0;count<regPasswordLength;count++)不应包含检查密码是否包含数字,也不应检查密码是否超过7个字符,因此循环应如下所示

for (int count = 0; count < regPasswordLen; count++) {
                if (Character.isUpperCase(regPassword.charAt(count)))
                    {regPasswordUppercaseCheck = true;break;}
            }

我在这里使用break来摆脱循环我发现密码在经过一些修改后包含一个大写的时候你的代码看起来像这样

do {
            if (count3 > 0) {
                System.err.println("- At least 1 Uppercase");
                System.err.println("- At least 1 number");
                System.err
                        .println("- At least 7 characters long, but no more than 15 characters.");
            }
            regPassword = input.nextLine();
            regPasswordLen = regPassword.length();
            for (int count = 0; count < regPasswordLen; count++) {
                if (Character.isUpperCase(regPassword.charAt(count)))
                    {regPasswordUppercaseCheck = true;break;}
            }
                if(regPasswordUppercaseCheck==false){
                    System.err
                            .println("Your password did not contain an Uppercase letter");
                    regPasswordUppercaseCheck = false;
                }

                    regPasswordNumCheck = regPassword.contains("1") || regPassword.contains("2")
                            || regPassword.contains("3")
                            || regPassword.contains("4")
                            || regPassword.contains("5")
                            || regPassword.contains("6")
                            || regPassword.contains("7")
                            || regPassword.contains("8")
                            || regPassword.contains("9")
                            || regPassword.contains("0");

                if(regPasswordNumCheck==false) {
                    System.err
                            .println("Your password did not contain at least 1 number.");
                    regPasswordNumCheck = false;
                }

                if (regPasswordLen >= 7)
                    regPasswordLengthCheck = true;

                else {
                    System.err
                            .println("Your password did not meet the minimum length requirements.");
                    regPasswordLengthCheck = false;
                }

            count3++;
        } while (!regPasswordUppercaseCheck || !regPasswordNumCheck
                || !regPasswordLengthCheck);

        System.out.println("test");