- ベストアンサー
引数別の例外処理
(1)コマンドラインの1つ目の引数を整数に変換して、int型の変数num1に代入。 (2)コマンドラインの2つ目の引数を整数に変換して、int型の変数num2に代入。 (3)num1とnum2の掛け算結果を標準出力。 (4)例外「NumberFormatException」が発生した場合は、“○(引数の例外発生した方の値)は整数に変換できません”の文字列を標準出力し、プログラム終了。 という問題で、NumberFormatException の○の部分の表示の仕方を教えて下さい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
一番簡単なのは、java.lang.Throwable#getMessage() を使う方法でしょうね。 try{ int num1 = Integer.parseInt(args[0]); int num2 = Integer.parseInt(args[1]); System.out.println(num1*num2); } catch(NumberFormatException ne) { System.out.println(ne.getMessage()+"は整数に変換できません"); System.exit(0); } こんな感じで。
その他の回答 (2)
- takaP-
- ベストアンサー率79% (83/105)
java.lang.Throwable#getMessage() という書き方が悪かったかもしれませんね。 これは、プログラマ間でメソッド情報のやり取りをする場合に良く使われる記述でして... パッケージ.クラス名#メソッド名 という記述ルールになっています。 今回の場合でしたら、java.lang パッケージ内の Throwable クラスに在る getMessage() メソッドを指し示しています。 Java API Reference 等で検索する時見つけやすい様にという配慮から、こういった記述が好まれるのだと思います。 例外やエラーのクラスは全て java.lang.Throwable クラスを継承していますので、今回の java.lang.NumberFormatException というクラスも Throwable のメソッドを全て持っています。 ですから、catch ステートメントの引数として送られてくる NumberFormatException のインスタンスに対して、getMessage() を指示する事が可能なのです。 それで、getMessage() メソッドで得られる文字列は、例外を起こすメソッド(今回の場合は、java.lang.Integer#parseInt() です)によって、何をメッセージ文字列にするのかは違ってきますが、java.lang.Integer#parseInt() を作成したプログラマは、parseInt() で整数変換が不可能だった引数の文字列をそのまま返す仕様に決めたわけです。 public static int parseInt(String s)throws NumberFormatException { //文字列を整数に変換する処理 ~省略~ //変換に成功したら... return int_number //変換に失敗したら... throw new NumberFormatException(s); } おおざっぱですけど....こんな感じです。 ですから、 int i = Integer.parseInt("NotNumber"); で起きた例外、NumberFormatException のインスタンスne の getMessage() での戻り値は、"NotNumber" 文字列になります。 余計に解かり辛いかもなぁ(笑
お礼
わざわざご説明ありがとうございます。 なんとなく仕組みが分かりました。 大変勉強になりました。ありがとうございました。
- wogota
- ベストアンサー率42% (66/154)
それぞれの行程別にtry~catchを行うか、フラグとなる変数を用意しておき行程によって 値を設定しておくなどがあると思います。 前者の方法を用いて、たとえば引数としてString[] argsを与えたとして、 try{ num1= Integer.parseInt( args[ 0]); }catch( NumberFormatException nfe){ System.out.println( args[ 0]+ "は整数に変換できません"); return; }catch( Throwable thr){ System.out.println( "何かをキャッチ"); return; } try{ num2= Integer.parseInt( args[ 1]); }catch( NumberFormatException nfe){ System.out.println( args[ 1]+ "は整数に変換できません"); return; }catch( Throwable thr){ System.out.println( "何かをキャッチ"); return; } という形で記述できると思います。
お礼
早速のご回答ありがとうございます。 なるほど、catch でreturn を使えばよかったんですね。 ずっとcontinue で頑張ってました。 これから、試してみたいと思います。
お礼
昨日、今日と連日お世話になりありがとうございます。 まだまだ、勉強して間もないもので…。 java.lang.Throwable#getMessage() ですね。 知らない用語ですが、調べてみます。ありがとうございました。