public void runMenu() {
int x = 1;
Scanner Option = new Scanner (System.in);
int Choice = 0;
do {
try {
System.out.println("Choose Option");
System.out.println("");
System.out.println("1: Create Account");
System.out.println("2: Check Account");
System.out.println("3: Take Action");
System.out.println("4: Exit");
System.out.println("Please choose");
Choice = Option.nextInt();
switch (Choice) { //used switch statement instead of If else because more effective
case 1:
CreateAccount();
break; //breaks iteration
case 2:
selectAccount();
break;
case 3:
Menu();
int choice = UserInput();
performAction(choice);
break;
case 4:
System.out.println("Thanks for using the application");
System.exit(0);
default:
System.out.println("Invalid Entry");
throw new Exception();
}
} catch (Exception e) {
System.err.println("Enter Correct Input");
return;
}
} while (true);
}
我试图在用户输入错误的输入类型(如字母)时捕获异常,然后返回菜单,现在它捕获异常但它不会停止运行我必须强制停止程序。所以我添加了一个返回,但只显示异常错误并停止,如何让它返回菜单?
答案 0 :(得分:0)
移动"尝试{"在" System.out.println之后("请选择");"线。
答案 1 :(得分:0)
那是因为你在catch块中从方法本身返回。 并且不要抛出这样的异常。只需使用一些布尔值来知道选择是否有效并循环直到选择输入正确。不要使用while(true),而是每次都像下面那样依赖布尔标志,
public void runMenu() {
int x = 1;
Scanner Option = new Scanner (System.in);
int Choice = 0;
boolean isValidChoice = false;
do{
isValidChoice = false;
Choice = 0;
System.out.println("Choose Option");
System.out.println("");
System.out.println("1: Create Account");
System.out.println("2: Check Account");
System.out.println("3: Take Action");
System.out.println("4: Exit");
System.out.println("Please choose");
if(Option.hasNextInt()){
Choice= Option.nextInt();
isValidChoice = true;
}
switch (Choice)
{
case 1:
CreateAccount();
break;
case 2:
selectAccount();
break;
case 3:
Menu();
int choice = UserInput();
performAction(choice);
break;
case 4:
System.out.println("Thanks for using the application");
System.exit(0);
default:
isValidChoice = false;//if invalid choice, then set flag to loop
System.out.println("Invalid Entry");
}
} while (!isValidChoice);
}
答案 2 :(得分:0)
你只需要删除catch中的返回值。也只是作为一个提示,你可以摆脱do while而只是有一个while循环,因为循环永远不会结束。
Game.game.fail();
答案 3 :(得分:0)
好的,所以我非常确定这应该有效:
如果存在有效输入
,则在while循环之外创建一个布尔值boolean validInput = true;
默认情况下,将此值设置为false(表示输入无效)
default:
System.out.println("Invalid Entry");
validInput = false;
throw new Exception();
确保catch语句仍在do循环中,因为throw子句将暂停正常执行并转换为异常执行。接下来,测试人员将测试是否存在有效输入
while(!validInput)
最后转到do循环的顶部并将validInput设置为true。这将使每次清除之前的错误输入时都是这样。
这应该有用。