有人可以用我的主要方法向我突出问题吗?一旦我完成第一个选项并尝试输入另一个选项,我收到扫描程序关闭的错误异常?
我认为我遇到的问题是来自我的尝试捕获的位置,最后阻止但不完全确定!谢谢!
/**
* Scanner used for input within program
*/
public static Scanner scanner = new Scanner(System.in);
/**
* Main method that provides user with a menu in which each number
* represents a different task in which they can carry out
*/
public static void main(String[] args) {
int menuOption=0;
do{
try {
// Declaring var for user Input (defaulted to 0)
menuOption = showMenu();
switch (menuOption) {
case 1:
add();
break;
case 2:
subtract();
break;
case 3:
generateRandomNumber();
guessRandomNumber();
break;
case 4: // invoke print loop method (use params here to get
// experience!)
break;
case 5: // invoke print sum and average
break;
case 6: System.out.println("Quitting Program...");
break;
default:
System.out.println("Sorry, please enter valid Option");
}// End of switch statement
} catch (Exception ex) {
//flush scanner
scanner.next();
}
finally {
// Finally block ensures scanner is always closed
scanner.close();
}
}while(menuOption!=6);
//Exiting message
System.out.println("Thanks for using this Program...");
答案 0 :(得分:0)
问题是在循环的第一次迭代中,您正在关闭finally块中的扫描程序。即使未捕获异常,finally块也会每次都关闭。
答案 1 :(得分:0)
我猜你正在使用程序流的异常(并且在那里抓住了所有内容!)?别。例外是非常昂贵的,并且将它们用于程序流程会使代码混乱很多。
您在scanner.next()
声明中使用catch
:这将要求新输入。
但由于finally
块在catch
之后立即执行,因此您将立即关闭它。
finally
块将执行,无论是否有异常。它旨在清理资源,但是你太早清理它们。
删除try-catch(或使其更合适)并且不要在finally
块中关闭扫描仪。
答案 2 :(得分:0)
关闭循环外的扫描仪,摆脱最后的
do {
...
} while (...)
scanner.close();
答案 3 :(得分:0)
现在您的控制流程看起来像这样
do {
try {
//read from scanner
}
finally {
scanner.close();
}
} while (menuOption != 6);
但这会在第一次迭代后关闭扫描仪。
您可能应该将do...while()
移到try{...}
块内。
try {
do{
//read from scanner
}
while (menuOption != 6);
}
finally {
scanner.close();
}
这样,确保关闭扫描仪的finally
块将在循环之外。
答案 4 :(得分:-1)
也许你得到一个例外,然后在最后的
中输入了捕获的代码托盘以查看您是否进入了捕获区