我使用while循环来检查输入是否是整数,第一次遇到错误的类型,它工作正常,在循环中执行一次语句。但是从第二次开始,它在循环中运行语句两次。我已经使用sc.nextLine()
来清除之前的输入,仍然......
请忽略它是我需要在这种情况下得到的日期,我理解还有其他方法来获取日期,假设它是程序稍后需要的整数。 我想知道的是什么导致循环在进行新输入之前第二次运行两次?以及如何避免这种情况? 感谢
如果需要,我可以复制整个程序,但似乎有点长...
问题是getInput()
方法:
import java.util.Scanner;
public class DayOfWeek {
static Scanner sc = new Scanner(System.in);
static int day, month, year;
public static void main(String[] args) {
System.out.println("");
System.out.print("Please enter the DAY in numeric form: ");
day = getInput();
System.out.print("Please enter the MONTH in numeric form: ");
month = getInput();
System.out.print("Please enter the YEAR in numeric form: ");
year = getInput();
}
public static int getInput() {
while (!sc.hasNextInt()) {
sc.nextLine();
System.out.print("Please enter integer only. Try again: ");
}
return sc.nextInt();
}
}
这是控制台上的结果:
Please enter the DAY in numeric form: a
Please enter integer only. Try again: 1
Please enter the MONTH in numeric form: b
Please enter integer only. Try again: Please enter integer only. Try again: 1
Please enter the YEAR in numeric form: c
Please enter integer only. Try again: Please enter integer only. Try again:
答案 0 :(得分:1)
因为在读取整数值之后,它将从[ENTER]
离开System.in
。当您开始下一个getInput()
时,[ENTER]
会被sc.hasNextInt()
测试并返回false。所以它将循环两次以进行第二轮和第三轮输入。
尝试按以下方式修改您的方法。对于每轮输入,它将丢弃第一个整数后的任何用户输入。
public static int getInput() {
while (!sc.hasNextInt())
{
sc.nextLine();
System.out.print("Please enter integer only. Try again: ");
}
int result = sc.nextInt();
sc.nextLine();
return result;
}