// 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 =