gpt4 book ai didi

java - 扫描器不会等待循环读取 nextInt()

转载 作者:搜寻专家 更新时间:2023-11-01 03:34:01 25 4
gpt4 key购买 nike

我需要读入一个整数,如果它不是整数则显示一条消息,我需要循环直到只输入一个 int。我在下面的代码中遇到的问题是当它循环时它不会等待读取 nextInt,它只会继续循环 - 打印出重试消息。

    do {
if (reader.hasNextInt()) {
userX = reader.nextInt();
isANumberFlag = true;
} else {
System.out.println("Please enter numbers only, try again: ");
}
} while (isANumberFlag == false);

最佳答案

您陷入了 while 循环,因为您的阅读器的索引停留在同一点。
因此,如果您键入 “some non numeric gibberish”,指针将停留在此处,程序将继续要求您输入数字。您可以通过在 else 子句中移动索引来解决此问题:

 Scanner reader = new Scanner(System.in);
boolean isANumberFlag = false;
int userX = 0;
do {
System.out.println("please enter a number: ");

if (reader.hasNextInt()) {
userX = reader.nextInt();
isANumberFlag = true;
}
else {
System.out.println("Please enter numbers only, try again: ");
reader.next(); //move your index in the else clause
}
}
while (isANumberFlag == false);
System.out.println(userX);
}

请注意,如果您键入部分数字的单词,例如:"notValid5000",此解决方案将要求您再次键入内容。

但是如果你输入一个部分数字的句子,例如:“notValid 5000”它会说“Please enter numbers only, try again:”然后直接接受数字 5000 部分,作为整数。

另一种解决方案是将一行作为 String 读取并使用正则表达式验证特定行是否为 int:

Scanner reader = new Scanner(System.in);
boolean isANumberFlag = false;
String input;
int userX = 0;
do {
System.out.println("please enter a number: ");
input = reader.nextLine();

if (input.matches("\\d+")) {
userX = Integer.parseInt(input);
isANumberFlag = true;
}
else {
System.out.printf("you typed %s, which is not allowed \n", input);
System.out.println("Please enter numbers only, try again: ");
}
}
while (isANumberFlag == false);
System.out.println(userX);

如果整行都是数字,此解决方案将只接受您的输入。

有关使用扫描仪进行 int 验证的更多信息,请访问 this topic

关于java - 扫描器不会等待循环读取 nextInt(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37302995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com