Scanner choice = new Scanner(System.in);
while(!choice.hasNextInt()) {
System.out.println("Invalid input");
choice.next();
}
// Carry out appropriate method relating to user choice
boolean done = false; // Loop is not finished
while (!done) {
int i = choice.nextInt(); // Save the user's choice as int i
/*
* A switch statement here would probably be more elegant but this works too
* Problem: If the user inputs a non-integer number e.g. 2.3 the program explodes :(
*/
if (i == 1) {
newGame(); // Call newGame method
} else if (i == 2) {
playGame(); // Call playGame method
} else if (i == 3) {
viewResults(); // Call viewResults method
} else if (i == 4) {
done = true; // If user quits, the loop is done
quitGame(); // Call quitGame method
} else {
System.out.println("Invalid input");
}
}
唯一有效的输入必须是数字1、2、3和4。如果我输入一个字符串,它将不接受它。如果我输入的数字大于4,则不接受。但是,如果我要输入2.3或其他内容,程序将崩溃。我看不到它是什么引起的,因为2.3不是整数,我也不知道它是如何通过Scanner中的hasNextInt()方法的。有人照亮了吗?
最佳答案
对于输入2.
,第一个int是2
,因此会执行playGame()
,但done
仍是false
,因此由于while(!done)
循环,再次在choice.nextInt()
上调用.
,这不是诠释
因此,例外。
关于java - Scanner类的hasNextInt()方法似乎允许十进制通过,或者可能是由其他原因引起的。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23194368/