在此java方法中,要点是扫描程序可以在最小值和最大值之间接收一个整数。如果收到的 int 超出了这些范围,则程序将正确输出“无效输入”。但是,如果输入“ g”或“ h”之类的值或非int的值,则会创建一个无限循环。
我试图在代码中的多个位置重新初始化扫描器,但看起来好像是从System.in输入int以外的内容时,它又一次又一次通过了扫描器并保持了循环。任何想法
public static int promptInt(int min, int max) {
while (false != true) {
int b = 0;
Scanner scnr = new Scanner(System.in);
System.out.print("Choose a value between " + min + " and " + max + ": ");
if (scnr.hasNext()) {
if (scnr.hasNextInt()) {
b = scnr.nextInt();
if (b <= max) {
return b;
} else {
System.out.println("Invalid Value");
}
}
else if (scnr.hasNextInt() == false) {
System.out.println("Not an Int");
}
}
}
}
答案 0 :(得分:1)
根据上面的一些评论,需要scnr.next(),否则它将继续检查已初始化的第一台扫描仪。这是修改后的代码,现在可以使用。
public static int promptInt(int min, int max) {
Scanner scnr = new Scanner(System.in);
while (false != true) {
int b = 0;
System.out.print("Choose a number between " + min + " and " + max + ": ");
if (scnr.hasNext()) {
if (scnr.hasNextInt() == false) {
System.out.println("Invalid value.");
//the scnr.next was needed here
scnr.next();
}
else {
b = scnr.nextInt();
if (b <= max) {
return b;
} else {
System.out.println("Invalid value.");
}
}
}
}
}