練習問題

8.5 練習問題

本章で習った内容を元に練習問題を解いてください。

問1 次の設問①~⑤について○か×で答えなさい。

設問
① 例外が発生すると必ずcatchブロックが処理される。
② 例外が発生していない場合でも、必ずfinallyブロック内の処理は実行される。
③ catchブロックは複数設定できるので、catchブロックに指定する例外クラスの並びは特に気にする必要はない。
④ catchの「()」括弧内に指定した変数名を利用すると、例外の詳細な情報を取得できる。
⑤ 例外処理を組み込むとソースコードが煩雑になるので、どんな例外も絶対に処理する必要はない。

問2 以下に示すソースコードを実行した結果として正しいものを答えなさい。

選択肢
① Redのみ画面に表示される。
② Red、Blue、Yellow、Pink、Black全て表示される。
③ Red、Blue、Pink、Blackが表示される。
④ Yellowのみ画面に表示される。
⑤ Red、Blue、Yellow、Pinkが表示される。
⑥ Blackのみ画面に表示される。

ソースコード

① ソース・フォルダー: myproj_basic/src
② パッケージ: jp.co.f1.basic.ch08exercise
③ 名前: Color
④ 作成するメソッド・スタブの選択: public static void main(String[] args) にチェックを入れる

1package jp.co.f1.basic.ch08exercise;
2 
3public class Color {
4  public static void main(String[] args) {
5    System.out.println("Red");
6 
7    try {
8      int[] array = new int[2];
9 
10      System.out.println("Blue");
11 
12      array[2] = 88;
13 
14      System.out.println("Yellow");
15 
16    } catch (Exception e) {
17      System.out.println("Pink");
18    } finally {
19      System.out.println("Black");
20    }
21  }
22}

問3 以下に示すSample.javaのソースコードを実行した場合、発生する可能性のある選択肢の例外を○か×で答えなさい。

選択肢
① ファイル入出力エラー(IOexception)
② 0除算エラー(ArithmeticException)
③ 配列エラー(ArrayIndexOutOfBoundsException)
④ 型変換エラー(NumberFormatException)
⑤ キーボード入力値のエラー(InputMismatchException)

ソースコード

① ソース・フォルダー: myproj_basic/src
② パッケージ: jp.co.f1.basic.ch08exercise
③ 名前: Sample
④ 作成するメソッド・スタブの選択: public static void main(String[] args) にチェックを入れる

1package jp.co.f1.basic.ch08exercise;
2 
3import java.util.*;
4 
5public class Sample {
6  public static void main(String[] args) {
7    int cnt = 0; // 入力数
8    int sum = 0; // 合計点
9    int ave = 0; // 平均点(少数点以下は切捨て)
10    int[] num = new int[3]; // 入力数値を格納する配列
11 
12    Scanner sin = new Scanner(System.in); // Scannerクラスをオブジェクト化
13 
14    // 繰り返し処理(配列の要素数分)
15    while (true) {
16      // キーボードより数値を入力し配列に格納
17      System.out.print("数値を入力して下さい。(999で強制終了)>");
18      int tmpNum = sin.nextInt();
19 
20      // 入力数値が999なら強制でループを抜ける
21      if (tmpNum == 999) {
22        break;
23      }
24      num[cnt] = tmpNum; // 配列にデータを格納する
25      cnt++; // 入力数をカウントアップ
26    }
27 
28    // 繰り返し処理(配列の要素数分)
29    for (int i = 0; i < cnt; i++) {
30      // 入力数値を合計点へ加算
31      sum += num[i];
32    }
33    // 平均点を計算
34    ave = sum / cnt;
35 
36    // 各結果を画面に出力
37    System.out.println("入力数は" + cnt + "です。");
38    System.out.println("合計点は" + sum + "です。");
39    System.out.println("平均点は" + ave + "です。");
40  }
41}

問4 問3のSample.javaを実行して、キーボードから整数文字以外を入力すると例外が発生します。整数文字以外が入力された際には、以下の実行結果になるPractice0801.javaを作成しなさい。作成する場合はSample.javaのソースコードを利用し、変更仕様に従って下さい。

ソースコード

① ソース・フォルダー: myproj_basic/src
② パッケージ: jp.co.f1.basic.ch08exercise
③ 名前: Practice0801
④ 作成するメソッド・スタブの選択: public static void main(String[] args) にチェックを入れる

実行結果(Sample.java)

変更仕様
  • 繰り返し処理内に例外処理(try~catch)を追加し、再度キーボード入力を行えるようにする。
  • tryブロック内に含める処理は、whileブロック内全ての処理を含める。
  • catchする例外はInputMismatchExceptionを指定する。
  • catchブロック内の処理は、以下のメッセージを画面に出力し、入力バッファのクリアを行う。

①「文字が入力されました。整数を入力して下さい。」
②入力バッファのクリア(sin.next();)
※例外が発生した場合、バッファのクリアを行わないと次のキーボード入力が行えない。

実行結果(Practice0801.java)

作成ポイント

問5 問4でキーボード入力値に関する例外は処理しましたが、それ以外にも以下に示す例外が発生します。

  • 1人も入力せずに終了した場合:0除算の例外
  • 4回以上入力した場合:最大配列要素数越えの例外

上記を対処するあらゆる例外を処理するような例外処理を組み込んだPractice0802.javaを作成しなさい。
問4で作成したソースコードを利用し、変更仕様に従って作成して下さい。

ソースコード

① ソース・フォルダー: myproj_basic/src
② パッケージ: jp.co.f1.basic.ch08exercise
③ 名前: Practice0802
④ 作成するメソッド・スタブの選択: public static void main(String[] args) にチェックを入れる

実行結果

・1人も入力せずに終了した場合

・4回以上入力した場合

変更仕様
  • tryブロックに含める処理は、main関数内全ての処理を含める。
  • catchする例外はExceptionを指定する。
  • catchブロック内の処理は、例外の詳細情報を画面に出力する。

    →「xxxxという例外が発生しました。」
    ※xxxx=例外の詳細情報

作成ポイント
1package jp.co.f1.basic.ch08exercise;
2 
3import java.util.*;
4 
5public class Sample {
6  public static void main(String[] args) {
7    try{
8 
9 
10    main関数の処理全て
11 
12 
13    }catch(・・・){
14      例外発生時に行う処理
15    }
16  }
17}

next>> 8.6 練習問題 解答

f