循环中的Java异常

时间:2013-11-18 07:36:53

标签: java exception-handling

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();
}

事情就是每当我给出的东西不是所选的选项(0,1,2,3,4)时,该函数会打印来自catch的消息然后请求一个新选项但是这个东西反复完成。如果break存在,则整个执行停止,我想要的只是再次询问一个选项,但没有无限循环。例如,如果我键入“r”而不是数字,它应该捕获异常并再次通过while。 我错过了什么?

3 个答案:

答案 0 :(得分:1)

try...catch的基本目的是try执行可能抛出异常的代码,如果 抛出异常,catch它和处理它。

在这种情况下,无效输入不会抛出异常,除非他们设法在那里潜行一个字符,这会导致无限循环。

而不是假设用户将输入数字 - 这是Scanner#nextInt通常假设的 - 而是读取整行,并使用Integer.parseInt()构建int

option = Integer.parseInt(b.nextLine());

如果因为有人决定将“foo”改为“1”而爆炸,那么你将会遇到异常情况,并能够重新输入值。

答案 1 :(得分:0)

这样做

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");
}

答案 2 :(得分:0)

解决了它。我在catch中添加了b.nextLine();并且循环停止。