提问人:Agustin Medrano 提问时间:5/20/2021 更新时间:6/9/2021 访问量:890
我怎样才能让用户在 Java 中输入数字并重试?
How can I make the user just enter numbers and try again in Java?
问:
该程序应该按如下方式工作,程序要求输入一个数字,用户必须输入它,如果用户输入一个字母、一个小于 0 的数字或没有输入任何东西,将出现错误,它会告诉用户重试,给用户无限的尝试。
我已经尝试过了,但我只在捕获中得到了一个无限循环,我将不胜感激。
public static void numbers(){
Scanner in = new Scanner(System.in);
int number;
System.out.print("Enter only numbers: ");
while(true){
try {
number = in.nextInt();
if(number > 0){
break;
} else {
System.out.print("Try again: ");
}
} catch (Exception e){
System.out.print("Try again: ");
}
}
答:
1赞
Hamlet Leon
5/20/2021
#1
首先,这不是 stackoverflow 的目的。但我会帮助你。
如果您与其他 cmd 进程进行比较,它们总是会要求 y/N 答案。所以:
public static void numbers(Scanner overrideIn = null){
Scanner in = overrideIn ?? new Scanner(System.in);
int number;
System.out.print("Enter only numbers: ");
while(true){
try {
number = in.nextInt();
if(number > 0){
break;
} else {
System.out.print("Try again: ");
this.TryAgain(in);
}
} catch (Exception e){
System.out.print("Try again: ");
this.TryAgain(in);
}
}
public static void TryAgain(Scanner in)
{
char respond = in.next().charAt(0);
if (respond == 'y')
{
this.numbers(in);
} else {
System.out.print("See ya!");
}
}
1赞
Piotr
5/20/2021
#2
我认为问题在于,如果输入实际上不是整数,它就会留在扫描仪中。扫描仪根本不会前进到下一行或其他东西。
因此,这个无效的整数会阻止您访问更多内容,即使它是一个数字。
从 java 文档:
如果无法将下一个标记转换为有效的 int 值,则此方法将引发 InputMismatchException,如下所述。如果转换成功,扫描仪将前进到匹配的输入之外。
因此,对于不成功的转换,有问题的行 STAYS,以及下一次对 nextInt 方法的调用也将失败,尝试解析有问题的行。因此,您的无限循环。
2赞
Elle Do
5/20/2021
#3
public static void main(String[] args) throws IOException{
BufferedReader var = new BufferedReader(new InputStreamReader(System.in));
boolean response = false;
while (!response) {
try {
System.out.println("Input number: ");
String input = var.readLine();
int n = Integer.parseInt(input);
response = true;
} catch (Exception e) {
response = false;
}
}
}
评论
0赞
Elle Do
5/20/2021
为您找到了一个简单的解决方案。希望对你有帮助。
1赞
Samudra Ganguly
5/21/2021
#4
Scanner sc = new Scanner(System.in);
int n = 0;
while (n == 0) {
String s = sc.nextLine();
try {
n = Integer.parseInt(s);
}
catch(Exception e) {
System.out.println("Try again");
}
}
0赞
FairOPShotgun
6/5/2021
#5
这是您问题的答案:
import java.util.Scanner;
class test {
public static void numbers(){
while(true){
Scanner userInteraction = new Scanner(System.in);
System.out.print("Enter only numbers: ");
String userInput = userInteraction.nextLine();
if (userInput.matches("\\d+$")){
double userNum = Integer.parseInt(userInput);
System.out.println("Congrats! You typed a number!");
break;
} else {
System.out.println("GRRR! You didn't type a number!");
continue;
}
}
}
public static void main(String[] args) {
numbers();
}
}
输出:
工作原理:
为了检查 userInput 是否为数字,您需要使用正则表达式(或 REGular EXpression)。我使用了正则表达式匹配器。更多信息 这里 和 这里!在验证 userInput 是一个数字(使用正则表达式匹配器)后,我使用该函数将 String 更改为 Integer。然后,我会祝贺玩家和循环。如果玩家没有输入数字,我会警告玩家和循环。\\d+$
Integer.parseInt(userInput)
break;
continue;
评论
0赞
tucuxi
6/6/2021
当复制和粘贴文本就足够时,您不应该使用屏幕截图。此外,没有必要写“如果这不是您想要的结果,请发表评论。我会修改我的答案并提供你需要的东西。
0赞
FairOPShotgun
6/6/2021
如果这不是他们想要的结果怎么办.-。他们会投反对票,我将无法帮助他们。
0赞
tucuxi
6/7/2021
人们通常会解释他们的反对票。此外,查看您的代码,最好不要在循环的每次迭代中创建一个 Scanner,而是重用同一个 Scanner。从这个意义上说,萨穆德拉的答案更清晰。
0赞
FairOPShotgun
6/7/2021
凉。我还没有了解,所以我没有在我的答案中使用它。try..catch
评论