私はこのメソッドに文字列を渡しています。文字列は「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);
}
}
返信いただきありがとうございます。どうすればelse文の中にある最初のIllegalArgumentExceptionをスローすることができますか? – Jerinos
@KebinKeelerあなたはすでにそれを投げます!しかし、あなたはそれを捕まえて何もしません。だから、 'try-catch'を削除して、どこか他の場所(メソッドが呼び出されるところ)でエラーを処理するか、実際には' catch'ブロック(例えばログとスロー)で何かをします。それはあなたが達成しようとしているものによって決まります。 – Vache
私が理解できない問題は、catchブロックに新しいIllegalArgumentExceptionをスローして追加し、 "土曜日"に渡すと無効な月名文字列の代わりに不正な月番号メッセージがスローされるということです。これは、 "Saturday"がInteger.parseInt()を使用しようとすると例外が発生するためです。 「土曜日」は、IllegalArgumentExceptionに至る道筋にはなりません。私は1から12か月のうちの1日でない入力を考慮しようとしています。 – Jerinos