如何处理输入以及处理异常?

时间:2015-01-12 14:05:11

标签: java java.util.scanner

我想从用户那里获取整数输入。我正在使用try-catch异常,因此如果输入不是int,它会要求用户输入另一个输入。我写了以下代码:

   while (flag==true) {       
        try {    

            System.out.println("Enter the encryption key!");
            k = input.nextInt();
            flag = false;
        }
        catch (InputMismatchException ex) {
            System.out.println("Please enter integer value!(");


        } 
    }

但是当发生异常时,循环会继续打印

"Enter the encryption key!"
"Please enter integer value!"

无限,因为扫描仪输入不等待接收另一个输入。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

您应该在next子句中调用catch,这样可以解决问题。

请参阅docs - Scanner

  

当扫描仪抛出InputMismatchException时,扫描仪将不会   传递导致异常的令牌,以便可以检索它   或通过其他方法跳过。

如果next子句中没有catchinput.nextInt();会继续阅读相同的令牌,添加next会消耗该令牌。

答案 1 :(得分:1)

您可以尝试使用

  

input.nextLine()

因为它等到你按下回车键。但是如果我没记错的话,你需要将它解析为int。

答案 2 :(得分:1)

你应该向我提出Maroun Maroun看起来更 clean 的建议。

另一种方法是重新初始化循环中的Scanner

boolean flag = false;
        while (!flag) {       
            try {    
                input = new Scanner(System.in);//Initialize it here
                //....