连续3次输入错误密码如何让系统退出?

How can I get the system to exit if incorrect password is entered 3 consecutive times?

我正在尝试插入一个计数方法,如果用户在 3 次尝试中输入的密码不符合要求的条件,系统将退出。我试着放一个计数函数,每次密码不正确时,计数加 1,当计数 == 3 时,system.exit。我能得到一些建议为什么这对我不起作用吗?密码条件是,至少10个字符,至少1个大写字母,2个或3个数字,只有1个特殊字符。

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Pattern;

public class Test2 {
public static void main(String[] args) {
        int count = 0;
        
        System.out.println("Welcome to Humber College");
        System.out.println(" ");
        System.out.println(" ");
        
         Scanner in = new Scanner(System.in);
            System.out.print("Please enter a given  password : ");
            String password = in.nextLine();
            

            List<String> errorList = new ArrayList<String>();

            while (!isValid(password,  errorList)) {
                System.out.println("The password entered here  is invalid");
                count = count++;
                if (count == 3)
                {
                    System.exit(count);
                }
                
                for (String error : errorList) {
                    System.out.println(error);
                }

                System.out.print("Please enter a given  password : ");
                password = in.nextLine();
                
                
            }
            System.out.println("your password is: " + password);

        }

        public static boolean isValid(String password, List<String> errorList) {

            Pattern specailCharPatten = Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE);
            Pattern UpperCasePatten = Pattern.compile("[A-Z ]");
            Pattern digitCasePatten = Pattern.compile("[0-9 ]");
            errorList.clear();
            
            
            boolean flag=true;

         
            if (password.length() < 11) {
                errorList.add("Password should not be less than 10 characters");
                System.out.println(" ");
                flag=false;
            }
            if (!UpperCasePatten.matcher(password).find()) {
                errorList.add("Password must have atleast one uppercase character");
                System.out.println(" ");
                flag=false;
            }
            if (!digitCasePatten.matcher(password).find()) {
                errorList.add("Password should contain 2 or 3 numbers");
                System.out.println(" ");
                flag=false;
            }
            if (!specailCharPatten.matcher(password).find()) {
                errorList.add("Password must have 1 speacial character");
                flag=false;
            }
            
           
            return flag;

    }

}

原因是您的计数器未更新并保持在 0,因此 if 永远不会触发。 只需在您的 while 循环中使用 count++; 而不是 count = count++;,它就会像您期望的那样工作。

count++ 是 java 对于 'increment count, and then this expression resolves to the value of count before it incremented'。

所以,当你写:

count = count++;

并且,假设计数为 5,则此代码首先递增 count(现在为 6),然后表达式解析为“5”,然后将其分配为新值count。所以,现在,计数 仍然是 5

正确的递增方式就是count++。不是 count = count++。如果你坚持使用 =,你会写 count = count + 1,或 count += 1 - 它们都是相同的。

这不是递增变量的正确方法。

您可以按照以下方式对变量进行自增自减: 假设您有一个整数计数。

第一种方式:

  • count++;

第二种方式

  • 计数 = 计数 + 1;

第三条路

  • 计数 += 1;