-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

次のように、もう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一般に、1つのブロックに必要な数のブロックを追加できtryます。ただし、正しい順序を指定することを忘れないでください。最初に、より具体的な例外を配置し、最後に、より一般的なものを配置します。

考えられる例外をキャッチしたい場合は、次Throwableのクラスを使用できます。

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

新しいマルチキャッチを使用できます。それはからを持っています

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 に答える
0

意図的に不正なデータ「aaa」を入力しているので、次のように記述します。

div=Integer.parseInt(inData);

をスローしNumberFormatExceptionます。このためのキャッチブロックを追加できます:

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