如何限制用户在Java中输入4位数密码

时间:2018-11-17 09:47:59

标签: java

我想从用户那里输入引脚,并且想限制用户使用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");
        }
    }
}

5 个答案:

答案 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的值,00011是相同的值,但是后者是无效的引脚,而前者是有效的。

您应该使用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.");
    
}