-
ターミナルで ~/project
ディレクトリにいることを確認します。
-
プログラムを再度実行します。
java HelloJava
-
10 進数の入力を求められたら、hello
や abc
のような明らかに数値ではないものを入力します。
Enter a decimal number: hello
-
Enter キーを押します。ターミナルにたくさんの赤色のテキストが表示されるでしょう。これはエラーメッセージで、具体的には NumberFormatException
です。
Exception in thread "main" java.lang.NumberFormatException: For input string: "hello"
at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2050)
at java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.base/java.lang.Double.parseDouble(Double.java:651)
at HelloJava.main(HelloJava.java:10)
この NumberFormatException
は、文字列 "hello" を有効な double
値に解析できないために発生します。このような例外が発生し、それが処理されない場合、プログラムはクラッシュして実行を停止します。
実際のアプリケーションでは、ユーザーが無効な入力をしただけでプログラムがクラッシュすることは望ましくありません。このようなエラーを適切に処理する方法が必要です。Java では、例外を処理するために try-catch
ブロックを使用します。
try-catch
ブロックは次のように動作します。
- 例外を引き起こす可能性のあるコードは
try
ブロックの中に配置されます。
try
ブロック内で例外が発生した場合、catch
ブロック内のコードが実行されます。
- 例外が発生しない場合、
catch
ブロックはスキップされます。
try-catch
ブロックを使用して NumberFormatException
を処理するようにプログラムを修正しましょう。
-
WebIDE エディタで HelloJava.java
ファイルを開きます。
-
Double.parseDouble()
の呼び出しを try-catch
ブロックで囲むようにコードを修正します。
import java.util.Scanner;
public class HelloJava {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter a decimal number: ");
String userInput = scanner.nextLine();
try {
// 入力文字列を double 型に解析しようと試みる
double number = Double.parseDouble(userInput);
System.out.println("You entered: " + number);
} catch (NumberFormatException e) {
// NumberFormatException が発生した場合、このコードが実行される
System.out.println("Invalid input. Please enter a valid decimal number.");
}
scanner.close();
}
}
この更新されたコードでは、
Double.parseDouble(userInput);
行は try
ブロックの中にあります。
catch (NumberFormatException e)
ブロックは、try
ブロック内で NumberFormatException
が発生した場合、catch
ブロック内のコードを実行することを指定しています。
catch
ブロック内では、プログラムをクラッシュさせる代わりに、ユーザーに分かりやすいエラーメッセージを表示します。
-
ファイルを保存します(Ctrl+S または Cmd+S)。
-
修正したプログラムをコンパイルします。
javac HelloJava.java
-
プログラムを再度実行します。
java HelloJava
-
入力を求められたら、再び hello
のような無効な入力を入力します。
Enter a decimal number: hello
Invalid input. Please enter a valid decimal number.
今回は、プログラムはクラッシュする代わりに NumberFormatException
を捕捉し、catch
ブロックからのメッセージを表示しました。これははるかに良いユーザー体験です!