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。 如何更改此循环以在最后接受新输入?
答案 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的信息。在该方法中,您可以循环扫描输入,但根据状态,反应不同。