使用while循环检查输入,但它从第二次运行两次

时间:2017-10-24 06:56:02

标签: java while-loop

我使用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: 

1 个答案:

答案 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;
    }