为什么else语句是无限循环?

时间:2012-12-31 10:44:00

标签: java loops infinite-loop

我是Java的新手,我正在努力进行数据验证。当我使用有效数据时,代码运行正常,但是当我输入一个字符串而不是一个整数时,代码就会永远循环。它只是循环“输入错误。请输入一个数字。”提前致谢!

    //Get input from user
    System.out.print("What is your name (Last, First)? ");
    String name = scan.nextLine();
    System.out.print("enter a date:");
    String datein = scan.nextLine();

    boolean valid = false;
    while (valid != true)
    {   
        System.out.print("Electricity used (KW):");
        if (scan.hasNextDouble())
        {
            electricityUsed = scan.nextDouble();
            valid = true;
        }
        else
            System.out.println("Bad input. Please enter a number.");
    }

3 个答案:

答案 0 :(得分:8)

因为hasNextDouble总是返回false。

这是doc。你回答了自己的问题:

  

但当我输入一个字符串而不是一个整数

答案 1 :(得分:3)

要解决此问题,请在您的其他分支中添加scan.nextLine()

答案 2 :(得分:2)

更简单的方法是使用以下内容。

System.out.print("Electricity used (KW):");
while(!scan.hasNextDouble()) {
    scan.nextLine();
    System.out.println("Bad input. Please enter a number.");
    System.out.print("Electricity used (KW):");
}
double electricityUsed = scan.nextDouble();