在try/catch中捕获异常后继续执行循环

8

一旦在这段代码中捕获了异常,menuSystem方法将运行,但是一旦我输入一个数字,程序就会关闭并显示“构建成功”消息。是否有任何方法可以在发生异常后重新进入while循环?

public static void main(String[] args) {
   final UnitResults myUnit = new UnitResults(10, "Java");
   int option = menuSystem();

   try {
      while (option != 0) {
         final Scanner keyb = new Scanner(System.in);
         System.out.println("");
         switch (option) {
         }
      }
   } catch (Exception InputMismachException) {
      System.out.println("\nPlease Enter a Valid Number\n");
      option = menuSystem();
   }
}

4
你想把try/catch语句放在while循环内部。 - antlersoft
1
请在公共论坛上寻求帮助时更好地格式化您的代码。 - Perception
如果您正确缩进代码,就不需要那些冗余的 //end loop//end switch 等注释。 - Brendan Long
编辑:try catch 不在循环内部 扇自己一个耳光 感谢帮助。 - Bunion
3个回答

18

将您的try/catch放在while循环内:

    while (option != 0) {
        final Scanner keyb = new Scanner(System.in);
        System.out.println("");
        try {
            switch (option) {

            }
        } catch (Exception InputMismachException) {
            System.out.println("\nPlease Enter a Valid Number\n");
            option = menuSystem();
        }
    }

今天我学到了新的东西。谢谢。 - Jeremy M

1
trycatch放在while循环内部。如果代码使用nextInt(),则需要跳过无效输入,因为在不匹配的情况下它不会被消耗。
可以通过使用ScannerhasNextInt()方法,在尝试消耗输入之前,先检查是否有有效的输入,从而避免处理InputMismatchException异常:
while (!kb.hasNextInt()) kb.next();

0

你可以用另外一种方法来实现:

   List<File> directories;
   ...
   for ( File f : directories ) {
        try {
            processFolder(f);
        } catch( Exception e ) {
            SimpleLog.write(e);
        }
    }

我知道这是一个比较早的问题,但你能详细说明一下在这种情况下 continue 应该做什么吗? - Nils
抱歉,continue已经被隐含了。它将会继续执行循环。 - djangofan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接