public static int promptUser(Scanner in, String prompt, int min, int max) {
int userTempVal = 0;
do {
userTempVal = in.nextInt();
if (userTempVal < min || userTempVal > max) {
System.out.println(prompt);
}
}while (userTempVal < min || userTempVal > max);
return userTempVal;
}
这是我目前的代码。我基本上需要扫描用户的输入并确保它是min和max之间的整数。如果它不是min和max之间的整数,它会显示提示并扫描新的int。如果用户输入除int之外的任何内容(因此为double或字符串),则当前代码将失败。当输入不是int时,如何让我的代码显示提示并继续do while循环?这是我正在上课的,教师暗示我们可以使用hasNextInt()函数来解释这个问题,但每次我尝试使用它时,它都不起作用或者我得到一个错误。请帮忙,我是初学程序员!
编辑(使用具有Next Int()参数):
public static int promptUser(Scanner in, String prompt, int min, int max) {
int userTempVal = 0;
do {
userTempVal = in.nextInt();
if (userTempVal < min || userTempVal > max || !in.hasNextInt()) {
System.out.println(prompt);
}
}while (userTempVal < min || userTempVal > max || !in.hasNextInt());
return userTempVal;
}
我收到此错误 - &gt;当我键入int时,程序停止运行。当我输入一个字符串时:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at MineTest.promptUser(MineTest.java:60)
at MineTest.main(MineTest.java:24)
答案 0 :(得分:0)
您需要使用in.next()
来消费无效输入。
public static int promptUser(Scanner in, String prompt, int min, int max) {
int userTempVal = 0;
do {
if (in.hasNextInt()) {
userTempVal = in.nextInt();
if (userTempVal < min || userTempVal > max) {
System.out.println(prompt);
}
} else {
System.out.println("Invalid input");
in.next();
}
} while (userTempVal < min || userTempVal > max);
return userTempVal;
}
答案 1 :(得分:-1)
试试这个:
import java.util.*;
public class Main {
public static void main(String[] args) {
System.out.println("Correct Number: " + promptUser(new Scanner(System.in), "give corret number", 10, 20));
}
public static int promptUser(Scanner in, String prompt, int min, int max) {
int userTempVal = 0;
do {
if(in.hasNextInt()) { //Check if next input is an Integer
userTempVal = in.nextInt();
if (userTempVal < min || userTempVal > max) { //Check boundaries
System.out.println(prompt); //Print promt
}
}
else {
in.next(); // Get the next() Object out of Buffer
System.out.println(prompt); //Print promt
}
}while ((userTempVal < min || userTempVal > max)); // While is out of bounds
return userTempVal;
}
}
如果您有任何疑问,请询问