捕获异常后是否可以调用main(String [] args)?

时间:2010-05-03 13:17:46

标签: java exception-handling

我正在开发一个Serpinski三角形程序,要求用户绘制三角形的水平。为了保护我的节目,我把它放在:

Scanner input= new Scanner(System.in);
System.out.println(msg);
try {
    level= input.nextInt();
} catch (Exception e) {
    System.out.print(warning);
    //restart main method
}

如果用户用字母或符号打孔,是否有可能在捕获到异常后重启main方法?

3 个答案:

答案 0 :(得分:8)

您可以使用hasNextInt()阻止Scanner投掷InputMismatchException

if (input.hasNextInt()) {
   level = input.nextInt();
   ...
}

这是一个经常被遗忘的事实:您始终可以通过首先确保Scanner来阻止 InputMismatchExceptionnextXXX()上投掷hasNextXXX()。< / p>

但回答你的问题,是的,你可以像其他方法一样调用main(String[])

另见


注意:要在循环中使用hasNextXXX(),您必须跳过导致其返回false的“垃圾”输入。您可以通过调用和放弃nextLine()来执行此操作。

    Scanner sc = new Scanner(System.in);
    while (!sc.hasNextInt()) {
        System.out.println("int, please!");
        sc.nextLine(); // discard!
    }
    int i = sc.nextInt(); // guaranteed not to throw InputMismatchException

答案 1 :(得分:3)

好吧,你可以递归地调用它:main(args),但你最好使用while循环。

答案 2 :(得分:0)

你最好想要这样做:

boolean loop = true;
Scanner input= new Scanner(System.in);
System.out.println(msg);
do{
    try {
        level= input.nextInt();
        loop = false;
    } catch (Exception e) {
        System.out.print(warning);
        //restart main method
        loop = true;
    }
while(loop);