練習問題 解答
8.6 練習問題 解答
問1
① ×:対応する例外クラスがcatchブロックに設定されていないと処理は行われない。
② ○:finallyブロックは、例外発生の有無に関わらず必ず処理されます。
③ ×:例外クラスの下位クラスから上位クラスの順に並べないと、コンパイルエラーになります。
④ ○:変数から例外クラスの情報を取得することができます。
⑤ ×: 例外には必ず処理しないといけないチェック例外が存在します。
問2
③ 「Yellow」を表示する前の処理で例外が発生します。
問3
① ×:この例外が発生するクラスは利用していない。
② ○:入力数値が無い(1回目で999を入力)場合発生します。
③ ○:1つ目の繰り返し処理の条件が間違っているため、4回目の数値入力で発生します。
④ ×:型を変換するような処理を行っていない。
⑤ ○:intデータしかキーボード入力を受けつけないので、整数値以外を入力すると発生します。
問4
Practice0801.java
※例外処理を追加した部分のみを記載しています。その他問3のSample.javaと同じです。
・・・省略・・・ // 繰り返し処理 while(true){ try{ // キーボードより数値を入力し配列に入力 System.out.print("数値を入力して下さい。(999で強制終了)>"); int tmpNum = sin.nextInt(); // 入力数値が999なら強制でループを抜ける if(tmpNum == 999){ break; } num[cnt] = tmpNum; // 配列にデータを格納する cnt++; // 入力数をカウントアップ }catch(InputMismatchException e){ System.out.println("→「文字が入力されました。整数を入力して下さい。」\n"); // 入力バッファのクリア sin.next(); } } ・・・省略・・・解説
まずはwhileブロック内の処理全てをtryブロックで囲んでいます。そしてcatchの()内に処理する例外クラス「InputMismatchException」を指定しています。catchブロック内では画面にメッセージを出力し、「sin.next();」メソッドを利用してバッファのクリアを行っています。
catchブロックの処理が終っても処理自体がwhile内なので、繰り返し処理の先頭に戻り再入力を促します。
問5
Practice0802.java
※例外処理を追加した部分のみを記載しています。その他問題8-3のSample.javaと同じです。
package jp.co.f1.basic.ch08exercise; import java.util.*; public class Practice0802 { public static void main(String[] args) { try{ // 変数宣言 int cnt = 0; // 入力数 int sum = 0; // 合計点 int ave = 0; // 平均点(少数点は切捨て) ・・・中略・・・ // 各結果を画面に出力 System.out.println("入力数は" + cnt + "です。"); System.out.println("合計点は" + sum + "です。"); System.out.println("平均点は" + ave + "です。"); }catch(Exception e){ System.out.println(e+"という例外が発生しました。"); } } }解説
まずはメインメソッド内の処理全てをtryブロックで囲んでいます。そしてcatchの()内に全ての例外を処理する例外クラス「Exception」を指定しています。catchブロック内では例外のオブジェクトを指し示す変数「e」を利用して、例外の詳細情報を画面に表示します。catch以降の処理は無いのでこのまま処理が終了します。