• 締切済み

困っています。

こんにちは。 本を使って独学で勉強しているのですが、 例外処理の部分が分かりません。 問題文は、5人の点数を入力(0~100)し0未満かつ100より大きい 値が入力されないかをチェックする。(try_catch) この0未満で100より大きい値が入力されても処理を途中で中断せず 5人分の点数を入力する。 例外処理が発生したときにどうすれば途中で処理を中断せずに実行出来るか というところが分かりません。 どなたかよろしくお願いします。

みんなの回答

  • ssr-y6
  • ベストアンサー率71% (5/7)
回答No.3

 以下のプログラムを、コンパイルして java fivepoint 10 20 30 40 50 の形式で実行してみると、例外の発生の仕方がわかると思います。 点数の部分をマイナスや100よりも大きくしたり、数字でない文字を入れてみたり、 引数の個数を少なくしてみたりしてください。 public class fivepoint { public static void main(String args[]) { int Int1, Int2; for (Int1 = 0; Int1 < 5; Int1 ++) { try { Int2 = Integer.parseInt(args[Int1]);/*[1]*/ if ((Int2 < 0) || (Int2 > 100)) throw new Exception("MyException");/*[2]*/ System.out.println("Point:" + Integer.toString(Int2));/*[3]*/ } catch (Exception e) { System.out.println("Exception : " + e.toString());/*[4]*/ }; }; }; }  引数が数字でない文字や、個数が足りなかった場合の例外は、 [1]の部分でparseIntが発生させています。  点数がマイナスや100よりも大きい場合の例外は、[2]の部分で意図的に発生させています。  どちらの場合も、[3]は実行されずに[4]が実行されます。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

例外というのは「自分では手に負えない事態が発生した事」を 呼び出し元に伝達する手段です。 なので、この問題に例外を適用する場合は 「ユーザからの入力を受け取って、結果を戻す」関数(read_input)を作成し、 この関数内で「対応できない」事柄として範囲外の例外を throw する ことになるでしょう。 while ( 5 人分 ) {  try {   in_data = read_input(); // RangeError には対処できないので例外を throw   print_score(in_data);  } catch ( RangeError e ) {   print_error(); // 呼び出し側で RangeError に対処(印字するだけ)  } } こんな感じ。

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

どんな(なんという)例外をcatchするんですか?。例外処理は、ランタイムエクセプションとチェックドエクセプションでは相当違うし、さらに重要なことは、処理を中断せず続行してはいけない例外も多いです。むしろ、例外は、酒気帯び運転を検出して車を停止するような性質が強いですから、「いちばん無難に中断する(たとえばファイルは現状までを確実にセーブする)」ことを考えるべきです。

kool_mc
質問者

補足

>どんな(なんという)例外をcatchするんですか? 例えば数字を入力するべきを文字で入力があった場合などです。 >処理を中断せず続行してはいけない例外も多いです。 とりあえずどのようにすれば処理を中断せずに行えるかという事を 知りたいので、今回の場合は処理を中断するということを考えず 例えば5人分の点数を入力するとして、、、 >実行結果は 10点 30点 例外処理が検出されました。 39点 40点 ↑このような感じで表示を行いたいのです。

関連するQ&A