next up previous
Next: 4 オブジェクトの直列化 Up: 3 ファイルの取り扱い Previous: 3.7 文字列トークンを処理する例

3.8 対話プログラムの例

例外を区別して対話プログラムでの表示を行う例である.
// WrongAnswerException.java
public class WrongAnswerException
    extends Exception {}
WrongAnswerExceptionクラスは Exceptionクラスのサブクラスとして定義しておき, 答えが間違った場合の処理を受け付ける catch節を設けている. checkAnswerメソッドにその例外をスローするthrows節 を宣言し,checkAnswerメソッドを呼んでいるdisplayProblem もその例外をスローするthrows節を宣言しないと コンパイルエラーが起こる.
// Answer.java
import java.util.*;
import java.io.*;

public class Answer {
  int x, y, answer;
  Random random = new Random();
  BufferedReader br = new BufferedReader(
    new InputStreamReader(System.in));

  void displayProblem()
    throws WrongAnswerException {
    x = random.nextInt(10);
    y = random.nextInt(10);
    System.out.print(x + " + " + y + " = ");
    checkAnswer();
  }

  void checkAnswer()
    throws WrongAnswerException {
    try {
      String line = br.readLine();
      answer = Integer.parseInt(line);
    } catch (IOException e) {
      return;
    } catch (NumberFormatException e) {
      System.err.println(
        "数値を入力してください!");
      return;
    }

    if (x + y != answer)
      throw new WrongAnswerException();
  }

  public static void main (String args[]) {
    Answer cal = new Answer();
    while (true) {
      try {
        cal.displayProblem();
      } catch (WrongAnswerException e) {
        System.err.println(
          "答が誤っています!");
      }
    }
  }
}
% java Answer
7 + 0 = 40
答が誤っています!
7 + 6 = 13
9 + 5 = 20
答が誤っています!
7 + 1 = 8
0 + 2 = 2
7 + 1 = 9
答が誤っています!
4 + 3 = 7
2 + 4 = .
数値を入力してください!
4 + 3 = abc
数値を入力してください!
0 + 9 = 
数値を入力してください!
9 + 4 = 
数値を入力してください!
3 + 4 = a
数値を入力してください!
3 + 2 = ^D
数値を入力してください!
1 + 9 =


generated through LaTeX2HTML. M.Inaba 平成18年5月7日