要求用户输入值,直到输入整数

时间:2017-05-09 13:57:07

标签: java

我是编程中的菜鸟。 我想为prog编写代码,要求用户输入值,直到输入一个整数。

public class JavaApplication34 {

    /**
    * @param args the command line arguments
    */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int flag = 0;
        while(flag == 0) {
            int x = 0;
            System.out.println("Enter an integer");

            try {
                x = sc.nextInt();
                flag = 1;
            } catch(Exception e) {
                System.out.println("error");        
            }

            System.out.println("Value "+ x);
        }
    }
}

我认为代码是正确的,如果我输入的不是整数,它应该让我再次输入值。 但当我运行它,并说我进入xyz 它迭代无限时间而不要求我输入值。

test run :
Enter an integer
xyz
error
Value 0
Enter an integer
error
Value 0
Enter an integer
error
Value 0
Enter an integer
error
Value 0
Enter an integer
error
Value 0
Enter an integer
error
Value 0
Enter an integer
error
Value 0
Enter an integer
error
Value 0
Enter an integer
error
Value 0

4 个答案:

答案 0 :(得分:5)

  

当扫描程序抛出InputMismatchException时,扫描程序不会   传递导致异常的令牌。

因此sc.nextInt()再次读取相同的令牌并再次抛出相同的异常。

...
...
...
catch(Exception e){
     System.out.println("error");
     sc.next(); // <---- insert this to consume the invalid token
}

答案 1 :(得分:2)

在错误情况下,您需要清除您输入的字符串(例如,通过nextLine)。由于nextInt无法返回,因此扫描仪仍处于待处理状态。您还希望将输出值的行移动到 try,因为您在发生错误时不想这样做。

这些方面的东西:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    int flag = 0;
    while(flag == 0)
    {
        int x = 0;
        System.out.println("Enter an integer");
        try
        {
            x = sc.nextInt();
            flag = 1;
            System.out.println("Value "+ x);
        }
        catch (Exception e){
            System.out.println("error");
            if (sc.hasNextLine()) { // Probably unnecessary
                sc.nextLine();
            }
        }
    }
}

附注:Java有boolean,没有必要使用int作为标志。所以:

boolean flag = false;

while (!flag) {

flag = true; // When you get a value

答案 2 :(得分:2)

您可以更改逻辑,如下所示:

    int flag = 0;
    int x = 0;
    String str="";
    while (flag == 0) {         
        System.out.println("Enter an integer");
        try {
            str = sc.next();
            x = Integer.parseInt(str);
            flag = 1;
        } catch (Exception e) {
            System.out.println("Value " + str);
        }           
    }

这里我们首先从Scanner读取输入,然后我们尝试将其解析为int,如果输入不是整数值则会抛出异常。如果出现异常,我们会打印用户输入的内容。当用户输入一个整数时,它将成功解析,flag的值将更新为1,这将导致循环退出。

答案 3 :(得分:0)

this问题的答案可能会对您有所帮助

它使用扫描仪.hasNextInt()功能!