2012-02-20 12 views
0

私はこのメソッドに文字列を渡しています。文字列は「44」です。次に、それをintに解析し、if文を実行して1から12の間であるかどうかを確認します。次に、新しいiflegalArgumentException( "Illegal month number:" + inSetString)をスローします。間違った例外がスローされました

何らかの理由で、何もスローされず、次の例外になり、スローされます。新しいIllegalArgumentException( "無効な月名文字列:" + inSetString);

なぜ2番目の例外ステートメントをスローしますが、最初のステートメントはスローしませんか?それはelseステートメントに行きます。私は、System.out.println( "except" + inSetString)を使ってそれをテストしました。

は、ここに私のコードです:

public void setMonthName(String inSetString)  
{ 
     int i = 0; 
     monthNumber = -1; 

     try 
     { 
      System.out.println("first" + inSetString); 
      i = Integer.parseInt(inSetString); 
      System.out.println("next" + inSetString); 
      if (i >= 1 && i <= 12) 
      { 
       monthNumber = i; 
      } 
      else 
      { 
        System.out.println("except" + inSetString); 
       throw new IllegalArgumentException("Illegal month number here: " + inSetString); 
      } 
     } 
      catch (IllegalArgumentException e) 
      {  

      } 

     // if it gets to here we know it's a string 
     for (int index = 0; index < monthNames.length; index++) 
     { 
      if (monthNames[index].equalsIgnoreCase(inSetString)) 
      { 
       monthNumber = index; 
      } 
     } 
     if (monthNumber == -1) 
     { 
      throw new IllegalArgumentException("Invalid month name string: " + inSetString); 
     } 
     } 

答えて

8

例外がスローされますが、あなたは何を行うと、実行を継続することを可能にしませんcatchブロックを持っています。その後、もう一方の例外に達し、プログラムがクラッシュします。

キャッチブロックにいくつかのログ(またはe.printStackTrace())を追加してみると、何が起こるかがわかります。

また、printステートメントを追加する代わりに、IDEのデバッガを使用してみてください。あなたはあなたのプログラムの実行をよりよく理解するでしょう。

+0

返信いただきありがとうございます。どうすればelse文の中にある最初のIllegalArgumentExceptionをスローすることができますか? – Jerinos

+0

@KebinKeelerあなたはすでにそれを投げます!しかし、あなたはそれを捕まえて何もしません。だから、 'try-catch'を削除して、どこか他の場所(メソッドが呼び出されるところ)でエラーを処理するか、実際には' catch'ブロック(例えばログとスロー)で何かをします。それはあなたが達成しようとしているものによって決まります。 – Vache

+0

私が理解できない問題は、catchブロックに新しいIllegalArgumentExceptionをスローして追加し、 "土曜日"に渡すと無効な月名文字列の代わりに不正な月番号メッセージがスローされるということです。これは、 "Saturday"がInteger.parseInt()を使用しようとすると例外が発生するためです。 「土曜日」は、IllegalArgumentExceptionに至る道筋にはなりません。私は1から12か月のうちの1日でない入力を考慮しようとしています。 – Jerinos

関連する問題