在扫描仪中循环 if else

Loop if else in scanner

提问人:bruuh 提问时间:5/19/2022 更新时间:5/19/2022 访问量:218

问:

如果用户输入了某些内容并且使我的代码中的语句为 false,我想循环我的扫描仪,如果用户输入了 false 语句,循环将继续,但如果我输入正确的语句,它仍将继续。

Scanner sc = new Scanner(System.in);
    
    System.out.println("Enter your student number: ");
    String sn = sc.nextLine();
    
    String REGEX = "[0-9]{4}.[0-9]{2}.[0-9]{3}";
    Pattern pattern = Pattern.compile(REGEX);      
    Matcher matcher = pattern.matcher(sn);
   
    do {
        if (matcher.matches()) {
            System.out.println("You have succesfully logged in");   
            System.out.println("Hello " + sn + " welcome to your dashboard");   
        }
        else    
            System.out.println("Please enter your student number in this format: 'xxxx-xx-xxx' ");
            System.out.println("Enter your student number: ");
            sc.nextLine();

          
    } while (true);
Java 正则表达 循环 java.util.scanner

评论

0赞 Alireza 5/19/2022
我认为您需要添加 else 语句。Matcher matcher = pattern.matcher(sc.nextLine());

答:

1赞 dangling else 5/19/2022 #1
Matcher matcher = pattern.matcher(sn);

这与当前“sn”中的模式相匹配。如果“sn”发生更改,则不会影响匹配器。如果您读取另一行而没有将结果分配给任何内容,则不会影响“sn”或匹配器。

而且你没有循环终止 - 它只是“在真实时做”,没有出路。

所以,有三个问题:

  1. 需要在循环中创建匹配器。

  2. 第二次 nextLine 调用的结果需要分配给 'sn'

  3. 您需要一个环路终止。我建议使用一个标志“loggedIn”,最初是 false,在成功匹配时设置为 true,循环以“while (!loggedIn)”结尾

0赞 Ivo 5/19/2022 #2

我会像这样重写它

Scanner sc = new Scanner(System.in);

System.out.println("Enter your student number: ");
String sn = sc.nextLine();

String REGEX = "[0-9]{4}.[0-9]{2}.[0-9]{3}";
Pattern pattern = Pattern.compile(REGEX);

while(!pattern.matcher(sn).matches()) {
    System.out.println("Please enter your student number in this format: 'xxxx-xx-xxx' ");
    System.out.println("Enter your student number: ");
    sn = sc.nextLine();
}
System.out.println("You have succesfully logged in");
System.out.println("Hello " + sn + " welcome to your dashboard");

评论

0赞 dangling else 5/19/2022
是的,这很好,也很简洁。比我建议添加的标志变量要好。