以下のプログラムには、題意を明確にするためにあえて無意味な変数名を使用しています。
また、便宜的に複数のクラスを1つのファイルに書いていることがあります。
目次
0.プリントスタックトレースの解読
以下のソースコードを実行してエラーのプリントスタックトレースを読み、例外発生時にどこを見れば素早くエラーのあるソースコードにたどり着けるかを答えなさい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package p14; public class Q00 { public static void main(String[] args) { String str = "Java"; try { System.out.print("J"); Integer.parseInt(str); System.out.print("A"); } catch (NumberFormatException e) { System.out.print("V"); e.printStackTrace(); } System.out.println("a"); } } |
1.try…catch…finally 文
以下のソースコードを実行したとき何が出力されるかを答えなさい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package p14; class ExceptionTest1 { public void func(int i, int j) { try { System.out.print("J"); int k = i / j; System.out.print("A"); } catch (ArithmeticException e) { System.out.print("V"); } finally { System.out.print("a"); } } } public class Q01 { public static void main(String[] args) { ExceptionTest1 a = new ExceptionTest1(); a.func(1, 2); } } |
※便宜的に2つのクラスを1つのファイルに記述しているが本来はクラスごとにファイルを分けるべきである。
2.ArithmeticException
上記と同じパッケージに以下のJavaファイルを追加して実行したとき何が出力されるかを答えなさい。
1 2 3 4 5 6 7 8 9 |
package p14; public class Q02 { public static void main(String[] args) { ExceptionTest1 a = new ExceptionTest1(); a.func(1, 0); } } |
3.NullPointerException
以下のソースコードを実行したとき何が出力されるかを答えよ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package p14; public class Q03 { public static void main(String[] args) { int[] array = null; System.out.print("J"); try { array[0] = 0; System.out.print("A"); } catch (ArithmeticException e) { System.out.print("V"); } catch (NullPointerException e) { System.out.println("a"); } } } |
4.ArrayIndexOutOfBoundsException
以下のソースコードを実行したとき何が出力されるかを答えよ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package p14; public class Q04 { public static void main(String[] args) { int[] ary = new int[3]; try { for (int i = 0; i <= 3; i++) { ary[i] = i; System.out.print(ary[i]); } } catch (ArrayIndexOutOfBoundsException e) { System.out.println("配列の境界を越えました!"); } } } |
5.NumberFormatException
以下のソースコードを実行したとき何が出力されるかを答えよ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package p14; public class Q05 { public static void main(String[] args) { String str = "Java"; try { System.out.print("J"); Integer.parseInt(str); System.out.print("A"); } catch (NumberFormatException e) { System.out.print("V"); } System.out.println("a"); } } |
6.throwとthrowsキーワード
以下のプログラムはこのままではエラーが出て実行できない。
mainメソッド内にtry catch文を記述する方法とmainメソッドにthrowsキーワードを追記する方法で実行できるようにしなさい。
なお、IDEの便利機能を使って良い。
(実行しても例外が発生することにはなるが。。。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
package p14; public class Q06 { public static void main(String[] args) { ThrowTest.aMethod(); } } class ThrowTest { static void aMethod() throws Exception { throw new Exception(); } } |
※便宜的に2つのクラスを1つのファイルに記述しているが本来はクラスごとにファイルを分けるべきである。
7.数当てゲームの例外処理
以前作成した数当てゲームにおいて、数値以外が入力された場合の例外処理を加えなさい。
なお、以下の例のように数値以外を入力した回数も1回と数えること。
秘密の答え:84 5回以内に数を当ててね。3回以内ならすごいことだよ。 キーボードから数値を入力してください>a 数値を入れてね。 キーボードから数値を入力してください>a 数値を入れてね。 キーボードから数値を入力してください>a 数値を入れてね。 キーボードから数値を入力してください>84 あたり。まあまあすごいよ。 |
8.オリジナル問題作成
将来の後輩のために良い問題が出来たら教えてください。
以上。