循环中的Java异常

循环中的Java异常,java,exception-handling,Java,Exception Handling,问题是,每当我给出的不是所选选项(0,1,2,3,4)时,函数都会从catch打印消息,然后请求一个新选项,但这件事会重复进行。如果存在中断,则整个执行将停止,我只想再次请求一个选项,但不需要无限循环。例如,如果我键入一个“r”而不是一个数字,它应该捕获异常并再次通过while。 我错过了什么?做这个 Scanner b = new Scanner(System.in); public void menu() { while (true) { try {

问题是,每当我给出的不是所选选项(0,1,2,3,4)时,函数都会从
catch
打印消息,然后请求一个新选项,但这件事会重复进行。如果存在
中断
,则整个执行将停止,我只想再次请求一个选项,但不需要无限循环。例如,如果我键入一个“r”而不是一个数字,它应该捕获异常并再次通过
while
。 我错过了什么?

做这个

Scanner b = new Scanner(System.in);

public void menu() {
    while (true) {
        try {
            System.out.println("Your options is:");
            int option = 0;
            option = b.nextInt();
            b.nextLine();

            if (option == 1)
                add();
            else if (option == 2)
                delete();
            else if (option == 3)
                print();
            else if (option == 4)
                nr();
            else if (option == 0)
                break;
        } catch (Exception e) {
            System.out.println("Not a valid option!");
            // break;
        }
    }
    b.close();
}

我加了一个
b.nextLine()和循环停止。

try…catch
的基本目的是执行可能引发异常的代码,如果它确实引发异常,
捕获并处理它

在这种情况下,无效输入不会引发异常,除非它们设法将一个字符潜入其中,这将导致无限循环

与其假设用户将输入一个数字(这是
Scanner#nextInt
通常假设的),不如读取整行,然后使用
Integer.parseInt()
构造
int

try
{
  do
  {
   option=b.nextInt();
   // continue

   switch(option){


        case 0:  
                 break;
        case 1:  add();
                 break;
        case 2:  delete();
                 break;
        case 3:  print();
                 break;
        case 4:  nr();
                 break;
        default: System.out.println("Not a valid option!");
                 break;

   }

  }while(!(option==1||option==2||option==3||option==4))
}
catch(Exception e){
    System.out.println("Please enter a number");
}

如果因为有人决定用“foo”而不是“1”而导致失败,那么您将遇到例外情况,并能够再次输入值。

如果我输入一系列字母,会发生什么情况?
option = Integer.parseInt(b.nextLine());