我想从用户那里输入引脚,并且想限制用户使用4位数字引脚。我尝试过[但是当我输入0001却无法正常工作时,请输入4位数的密码,然后请解决它
void pin1()
{
//int pin;
for(int i=1;i<=1000;i++)
{
try
{
pin=obj.nextInt();
if(pin<=9999 && pin>=1000)
{
}
else
{
System.out.println("Pin must be four digit");
pin1();
}
break;
}
catch(InputMismatchException e)
{
obj.next();
System.out.println("Error use numbers not alphabets or characters");
}
}
}
答案 0 :(得分:0)
尝试一下
do {
System.out.print("Please enter a 4 digit pin:");
input = reader.nextLine();
if(input.length()==4){
//allow
}
}while( input.length()!=4);
答案 1 :(得分:0)
您为别针选择了错误的类型。由于int
的值,0001
和1
是相同的值,但是后者是无效的引脚,而前者是有效的。
您应该使用String
来存储图钉。这意味着您应该呼叫nextLine
而不是nextInt
:
String pin = obj.nextLine();
要检查此图钉是否包含4位数字,我们可以使用正则表达式\d{4}
。
Matcher m = Pattern.compile("\\d{4}").matcher(pin);
if (m.matches()) {
System.out.println("You have entered a 4-digit pin");
} else {
System.out.println("You have not entered a 4-digit pin");
}
或者,您可以使用for循环进行检查:
if (pin.length() != 4) {
System.out.println("You have not entered a 4-digit pin");
} else {
boolean allDigits = true;
for (int i = 0 ; i < 4 ; i++) {
if (!Character.isDigit(pin.charAt(i))) {
allDigits = false;
break;
}
}
if (allDigits) {
// pin is valid
} else {
System.out.println("Error use numbers not alphabets or characters");
}
}
答案 2 :(得分:0)
您的代码存在问题
`if(pin<=9999 && pin>=1000)`
允许数字在1000到9999之间,但0001或0300仍然是有效的4位数字
该代码仅允许numeric
,不允许alpha numeric
导入java.util.Scanner;
public class Post7 {
public static void main(String[] args) {
String regex = "\\d+";
Scanner sc = new Scanner(System.in);
System.out.println("please input a valid 4 digit pin");
while(true) {
String ln = sc.nextLine();
if(ln.length() == 4 && ln.matches(regex)) {
System.out.println("valid input "+ln);
break;
}else {
System.out.println("please input a valid 4 digit pin");
}
}
sc.close();
}
}
答案 3 :(得分:0)
您正在将0001
读为整数,该整数变成1
,不满足条件pin>=1000
。您可以做的一件事是首先检查字符串的长度,如果不是4,则返回错误。然后,如果正确的话,尝试将其转换为整数:如果出现错误,则用户可能未插入4位数字。
答案 4 :(得分:-3)
试试这个。
public static void main(String[] args) {
Scanner s = new Scanner (System.in);
int pin;
int attempt = 0;
while(attempt < 3) {
System.out.print("Enter PIN: ");
pin = s.nextInt();
System.out.println("");
s.nextLine(); //spacing for 2nd and 3rd attempts
if(pin >= 1000 && pin <= 9999) break;
else System.out.println("Please try again.");
System.out.println("");
attempt ++;
}
if(attempt < 3) System.out.println("You have successfully logged in!");
else System.out.println("Your card has been locked.");
}