需要创建一个使用循环检查密码是否正确的java程序。程序运行,但输出为';不正确

需要创建一个使用循环检查密码是否正确的java程序。程序运行,但输出为';不正确,java,loops,Java,Loops,无论何时输入密码(无论是有效格式还是无效格式),它都会输出“无效密码” import java.util.Scanner; 公共类密码测试 { 公共静态void main(字符串[]args) { 扫描仪输入=新扫描仪(System.in); 布尔长度=真; 布尔数字=真; 布尔小写=真; 布尔大写=真; char ch=0; 字符串s1; //提示用户输入密码 系统输出打印(“输入密码:”); s1=input.nextLine(); //检查ch是什么 对于(int i=0;i=8){ 长度

无论何时输入密码(无论是有效格式还是无效格式),它都会输出“无效密码”

import java.util.Scanner;
公共类密码测试
{
公共静态void main(字符串[]args)
{
扫描仪输入=新扫描仪(System.in);
布尔长度=真;
布尔数字=真;
布尔小写=真;
布尔大写=真;
char ch=0;
字符串s1;
//提示用户输入密码
系统输出打印(“输入密码:”);
s1=input.nextLine();
//检查ch是什么
对于(int i=0;i=8){
长度=真;
}
}
如果(数字==false&&小写==false&&大写==false&&长度==false)
System.out.println(“有效密码”);
其他的
System.out.println(“无效密码”);
}
}

我有个问题想问你,如果它不能是小写的,如果它不能是大写的,那么它会是什么?我这样做是为了让它必须是小写的,下面是代码(如果你想让它都是大写的,那么在代码
if(digital[I]==true | | |小写[I]==false | | |大写[I]==true)
if(digital[I]==true | |小写[I]==true |大写[I]==false)

import java.util.Scanner;
公共类密码测试{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
布尔长度;
布尔传递=真;
字符串s1;
//提示用户输入密码
系统输出打印(“输入密码:”);
s1=input.nextLine();
布尔[]数字=新布尔[s1.length()];
boolean[]小写=新的boolean[s1.length()];
boolean[]大写=新的boolean[s1.length()];
char[]ch=新字符[s1.length()];
//检查ch是什么
对于(int i=0;i=8;
if(length==false&&s1.length()>0){
int i;
对于(i=0;i
您所做的是首先将布尔值设置为true,然后在循环中再次将其设置为true,这是没有意义的。我认为此代码对您来说会很好

        Scanner input = new Scanner(System.in);
        boolean length = false;
        boolean digit = false;
        boolean lowercase = false;
        boolean uppercase = false;
        char ch = '\u0000';
        String s1;

        //Prompt user to enter password
        System.out.print("Enter password: ");
        s1 = input.nextLine();

        //Check what ch is
        for (int i=0; i<s1.length(); i++){
            ch = s1.charAt(i);

            if (Character.isDigit(ch)){
                digit = true;
            }
            if (Character.isLowerCase(ch)){
                lowercase = true;
            }
            if (Character.isUpperCase(ch)){
                uppercase = true;
            }
            if (s1.length()>=8){
                length = true;
            }
        }

        if (digit==true && lowercase==true && uppercase==true && length==true)
            System.out.println("Valid password");

        else
            System.out.println("Invalid password");
扫描仪输入=新扫描仪(System.in);
布尔长度=假;
布尔数字=假;
布尔小写=false;
布尔大写=false;
char ch='\u0000';
字符串s1;
//提示用户输入密码
系统输出打印(“输入密码:”);
s1=input.nextLine();
//检查ch是什么
对于(int i=0;i=8){
长度=真;
}
}
如果(数字==true&&小写==true&&大写==true&&长度==true)
System.out.println(“有效密码”);
其他的
System.out.println(“无效密码”);
对于未来,我认为会有所帮助

您的密码要求似乎是“长度为8个或更多字符,其中每个字符可能是小写字母、大写字母或数字”,对吗?我们可以用正则表达式来表示这些要求,例如
([a-z]|[a-z]|[0-9]){8,}
。这样,我们就可以编写

String password = input.nextLine();

if(password.matches("([a-z]|[A-Z]|[0-9]){8,}") {
    // Go about your business.
}

您需要首先在声明时将所有布尔值设置为
false
,然后在下面的代码中,仅当满足条件时才将其设置为
true
。此外,在打印“有效密码”时,检查所有布尔值是否为
true
,否则打印“无效密码”。检查字符串长度是否大于8应在循环体外部。以下代码有效

import java.util.Scanner;
public class PasswordTest
{
   public static void main (String[] args)
   {
      Scanner input = new Scanner(System.in);
      boolean length = false;
      boolean digit = false;
      boolean lowercase = false;
      boolean uppercase = false;
      char ch=0;
      String s1;

   //Prompt user to enter password
      System.out.print("Enter password: ");
      s1 = input.nextLine();

   //Check what ch is
      for (int i=0; i<s1.length(); i++){
         ch = s1.charAt(i);

         if (Character.isDigit(ch)){
            digit = true;
         }
         if (Character.isLowerCase(ch)){
            lowercase = true;
         }    
         if (Character.isUpperCase(ch)){
            uppercase = true;
         }             
      }
      if (s1.length()>=8){
          length = true;
       }

      if (digit==true && lowercase==true && uppercase==true && length==true)
         System.out.println("Valid password");

      else
         System.out.println("Invalid password");

   }
}
import java.util.Scanner;
公共类密码测试
{
公共静态void main(字符串[]args)
{
扫描仪输入=新扫描仪(System.in);
布尔长度=假;
布尔数字=假;
布尔小写=false;
布尔大写=false;
char ch=0;
字符串s1;
//提示用户输入密码
系统输出打印(“输入密码:”);
s1=input.nextLine();
//检查ch是什么
对于(int i=0;i=8){
长度=真;
}
如果(数字==true&&小写==true&&大写==true&&长度==true)
System.out.println(“有效密码”);
其他的
System.out.println(“无效密码”);
}
}

如果您从未为
true
指定不同的值,那么您的布尔值怎么会变成
false
00000000
与之匹配。
String password = input.nextLine();

if(password.matches("([a-z]|[A-Z]|[0-9]){8,}") {
    // Go about your business.
}
import java.util.Scanner;
public class PasswordTest
{
   public static void main (String[] args)
   {
      Scanner input = new Scanner(System.in);
      boolean length = false;
      boolean digit = false;
      boolean lowercase = false;
      boolean uppercase = false;
      char ch=0;
      String s1;

   //Prompt user to enter password
      System.out.print("Enter password: ");
      s1 = input.nextLine();

   //Check what ch is
      for (int i=0; i<s1.length(); i++){
         ch = s1.charAt(i);

         if (Character.isDigit(ch)){
            digit = true;
         }
         if (Character.isLowerCase(ch)){
            lowercase = true;
         }    
         if (Character.isUpperCase(ch)){
            uppercase = true;
         }             
      }
      if (s1.length()>=8){
          length = true;
       }

      if (digit==true && lowercase==true && uppercase==true && length==true)
         System.out.println("Valid password");

      else
         System.out.println("Invalid password");

   }
}