提问人:bruuh 提问时间:5/19/2022 更新时间:5/19/2022 访问量:218
在扫描仪中循环 if else
Loop if else in scanner
问:
如果用户输入了某些内容并且使我的代码中的语句为 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);
答:
1赞
dangling else
5/19/2022
#1
Matcher matcher = pattern.matcher(sn);
这与当前“sn”中的模式相匹配。如果“sn”发生更改,则不会影响匹配器。如果您读取另一行而没有将结果分配给任何内容,则不会影响“sn”或匹配器。
而且你没有循环终止 - 它只是“在真实时做”,没有出路。
所以,有三个问题:
需要在循环中创建匹配器。
第二次 nextLine 调用的结果需要分配给 'sn'
您需要一个环路终止。我建议使用一个标志“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
是的,这很好,也很简洁。比我建议添加的标志变量要好。
评论
Matcher matcher = pattern.matcher(sc.nextLine());