连续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;
我正在尝试插入一个计数方法,如果用户在 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;