扫描程序InputMismatchException with while循环

时间:2015-09-06 20:49:36

标签: java exception while-loop

SELECT area
     , COUNT( area )  AS thecount
     , concat(ROUND((COUNT(*) / AgentCount * 100 ), 1), '%') AS percentage
 FROM mytable
  cross join 
      (SELECT count(*) AgentCount from mytable) t
GROUP BY area
ORDER BY thecount DESC LIMIT 50;

如果我取消注释第二个bank = scan.nextInt();我得到相同的InputMismatchError,但我没有另一个尝试捕获所以它打印出stacktrace。 如何更改此循环以在最后接受新输入?

3 个答案:

答案 0 :(得分:2)

您可能输入了一个非整数字符,因此需要消费

} catch (InputMismatchException ex) {
    System.out.println("Invalid input: " + scan.nextLine());
}

答案 1 :(得分:1)

试试这段代码:

static int bank = 0;

public static void main(String[] args) {
    boolean valid = true;
    Scanner scan = new Scanner(System.in);

    do {
        System.out.println("How much money do you want to convert to chips?");
        if(scan.hasNextInt()){
            bank = scan.nextInt();
            valid = true;
        }else{
            scan.nextLine();
            valid = false;
            System.out.println("Enter a valid integer value");
        }
    }while(!valid);
}

希望它有所帮助。

答案 2 :(得分:0)

您可以在catch块中添加另一个try / catch但我相信这不是您想要做的。如果你真的想要做到这一点,你应该阅读有关状态机模式https://en.wikipedia.org/wiki/State_pattern#Java的信息。在该方法中,您可以循环扫描输入,但根据状态,反应不同。