尽管表达式终止,循环不会结束

时间:2018-11-18 17:29:52

标签: java

Hello Stack溢出社区,

我的提示是: **“您将进行错误检查,以确保输入的小时数在[0,23]范围内。不断询问用户,直到用户输入的有效范围内的时间为止。

当我的程序具有正确的整数输入(实际上是任何int输入)时,它将正常运行。但是,如果我输入非整数,则所有内容都会陷入无限循环。

我在做什么错了?

   import java.util.*;
public class Tester2 {
    int a; // any valid int number

public void loop() 
{
    Scanner sc = new Scanner(System.in);
    int x=0; // terminating int
    while(x==0) 
    {
        System.out.println("Enter 0-23: ");


            try
            {
                if(sc.hasNextInt()) 
                {
                    a=sc.nextInt();
                    if((a>=0&&a<=23)) 
                    {
                        System.out.println("Success! ");
                        x=1;
                    }
                    else 
                    {
                        System.out.println("Retry! ");
                        a=0;
                        x=0;
                    }
                }
            }
            catch (NumberFormatException ex) 
            {
                System.out.println("invalid input");
            }

        }

}

}

1 个答案:

答案 0 :(得分:0)

如果下一个要读取的元素不是有效的整数,则

sc.hasNextInt()将返回false。但是,在这种情况下,代码中的任何时候都不会读取此元素。

您应该确保在sc.hasNextInt()为假时读取并丢弃此元素(在sc.next()块内添加else应该可以解决问题)。