-3

我有问题。编码如下图所示。当我运行程序并输入“aaa”时,它显示错误,因为它只捕获算术异常。如何根据出现的问题添加适当的代码来克服异常?

import java.io.* ;
public class FinallyPractice1 
{
    public static void main(String [])
    {
        BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
        String inData; int num=0, div=0;
        try
        {   System.out.println("Enter the numerator:");
            inData=stdin.readLine();
            num=Integer.parseInt(inData);

            System.out.println("Enter the divisor:");
            inData=stdin.readLine();
            div=Integer.parseInt(inData);

            System.out.println(num+"/"+div+"  is  "+(num/div));
        }
        catch(ArrayIndexOutOfBoundsException ae)
        {
        System.out.println("You can't divide "+ num + " by " + div);
        }
         catch(ArithmeticException aex)
         {
          System.out.println("You entered not a number: " + inData);
        }
        finally
        {
        System.out.println("If the division didn't work, you entered bad data.");
        }
            System.out.println("Good-by");
    }
}

在此处输入图像描述

我已经找到答案了!编码如下:

 import java.io.* ;
    public class FinallyPractice1 
    {
        public static void main(String [] a) throws IOException
        {
            BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
            String inData; int num=0, div=0;
            try
            {   System.out.println("Enter the numerator:");
                inData=stdin.readLine();
                div=Integer.parseInt(inData);

                System.out.println("Enter the divisor:");
                inData=stdin.readLine();
                div=Integer.parseInt(inData);

                System.out.println(num+"/"+div+"  is  "+(num/div));
            }
            catch(ArithmeticException ae)
                  {
                      System.out.println("ArithmeticException by " + div);
                  }
                    catch(ArrayIndexOutOfBoundsException ae)
                    {
                    System.out.println("You can't divide "+ num + " by " + div);
                 }
                    catch(NumberFormatException ae)
                    {
                  System.out.println("NumberException");
                 }
                    finally
                  {
                    System.out.println("If the division didn't work, you entered bad data.");
                 }
                      System.out.println("Good-by");
        }
    }
4

4 回答 4

1

再添加一个catch块,如下所示:

    } catch(ArrayIndexOutOfBoundsException ae) {
        System.out.println("You can't divide "+ num + " by " + div);
    } catch(ArithmeticException aex) {
        System.out.println("You entered not a number: " + inData);
    } finally {
        //....
    }

一般来说,您可以根据catch需要向单个try块添加任意数量的块。但请记住给他们正确的顺序——首先放置更具体的例外,然后更通用——最后。

如果要捕获任何可能的异常,可以使用Throwable类:

try {
    // some potentially dangerous code
} catch (Throwable th) {
    // process error somehow
}
于 2012-10-12T14:19:58.170 回答
0

当您故意输入错误数据“aaa”时,您的声明:

div=Integer.parseInt(inData);

会抛出一个NumberFormatException. 您可以为此添加一个 catch 块:

...
} catch (NumberFormatException nfe) {
   System.err.println(nfe);
  // more error handling
} catch ...
于 2012-10-12T14:29:37.273 回答
0

您可以使用新的multi-catch。它有来自

catch (ArithmeticException |ArrayIndexOutOfBoundsException ae)

我建议您捕获您期望的异常,而不仅仅是一个毯子 Throwable 或 Exception

于 2012-10-12T14:31:38.737 回答
0

添加更多catch blocks来处理异常。

  catch(ArithmeticException ae)
        {
            System.out.println("ArithmeticException by " + div);
        }
        catch(ArrayIndexOutOfBoundsException ae)
        {
        System.out.println("You can't divide "+ num + " by " + div);
        }
        catch(IOException ae)
        {
        System.out.println("IOException");
        }
        finally
        {
        System.out.println("If the division didn't work, you entered bad data.");
        }
            System.out.println("Good-by");
于 2012-10-12T14:22:55.883 回答