質問: new Member(id,name); m2.who(); } catch(MyException e){ System.err.println("IDが正しくありません."); } } } ``` ### 試したこと Memberクラスのコンストラクタにて、idに代入する値が100未満または999より大きい場合に例外を投げる処理を書いてみました。 ### 補足情報(言語/FW/ツール等のバージョンなど) javaです。
回答: ソースコード ======= 変更箇所にはコメントいれました。 ``` // <変更:MyExceptionクラスを追加しました> class MyException extends Exception{ public MyException(String msg){ super(msg); } } /** *番号と名前を扱うMemberクラス */ class Member{ private int id; private String name; public Member(int id , String name) throws MyException { // <変更:throwsを追加しました> if(id >= 100 && id <= 999){ this.id = id; } else { // <変更:ifを削除しました> throw new MyException("IDが正しくない"); } this.name = name; } public void who(){ System.out.println(id + ":" + name); } } /** *idの値の範囲を設定して例外を投げるKadai66クラス */ public class Kadai66{ public static void main(String args[]){ int id; String name; try{ // <変更:移動しました> id = 200; name = "太郎"; Member m1 = new Member(id,name); m1.who(); id = 98; name = "二郎"; Member m2 = new Member(id,name); m2.who(); } catch(MyException e){ System.err.println("IDが正しくありません."); } } } ``` 実行結果 ===== ``` $ javac Kadai66.java && java Kadai66 200:太郎 IDが正しくありません. ``` 変更点 ==== * `MyException`クラスの作成 * `Member`のコンストラクタに`throws`を追加し`MyException`を投げることを宣言 * 論理的に問題があると思われるif文を削除 * `new Member()`を使うものは`MyException`を投げる可能性があるので、`try`節に移動した 補足 === 「論理的に問題があると思われるif文」とは `if(id < 100 && id > 999)`のことです。 「100よりも小さく、999より大きい数」多分ないです。 多分したいことは「100よりも小さい、または、999より大きい数」だと思うので、 `if(id < 100 || id > 999)`です。ですが、else文で問題がないと思われるので削除しました。