| ■ 誤った値の入力 |
上記で説明したいずれの方法で入力した場合も、値は文字列としてコンピュータに入力されます。したがって、入力された値が数値でなくても入力時には問題になりません。 しかし、その入力値を数値に変換しようとすると、例えば Integer.parseInt() や Double.parseDouble()を用いて文字を数値に変換しようすると、実行時にエラーが発生します。 次の実行例は、身長に誤った値(1qw)が入力されたために標準体重が計算できず、エラーを出した例です。
[egi@taro]$ java JcInput2
身長?1qw
Exception in thread "main" java.lang.NumberFormatException: For input string: "1qw"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:477)
at java.lang.Integer.parseInt(Integer.java:518)
at JcInput2.main(JcInput2.java:13)
[egi@taro]$
このように、数値であることを前提に実行されるメソッドで、数値でない値が引数として渡されると実行時にエラーが出力されプログラムが停止します。
これはプログラムの翻訳時(javac)には出ない誤りです。
人間が入力する場合は、必ず誤りをおかす可能性があります。そのたびにエラーを起こし中断するプログラムでは役に立ちません。そこで、プログラム実行中に誤りが起こる可能性がある箇所では、それを想定してプログラム作成しておく必要があります。
|
| ■ エラー表示して計算しない方法 |
次の実行例は、身長を入力して標準体重を出力するプログラムです。 このプログラムでは、以前のプログラムと異なって、正しいデータを入力すると標準体重を計算し出力しますが、誤りのデータを入力すると次のようにメッセージを出力し、標準体重の計算をしません。 [egi@taro prog]$ java JcInput3 身長?156 身長は156です。 標準体重は50.4です。 [egi@taro prog]$ java JcInput3 身長?1we データが誤りで計算できません [egi@taro prog]$
このプログラムは、次のように作成されています。
try {
エラーの発生する命令
}
catch(エラーの種類){
エラーが発生した場合に実行する命令
}
|
| ■ エラー表示して再入力させる方法 |
次のように入力した値がエラーであった時、エラーメッセージを表示した後に、 再入力させてくれるプログラムであれば、さらに親切です。 [egi@taro]$ java JcInput4 身長?1qa データが誤りで計算できません 身長?1wd データが誤りで計算できません 身長?157 身長は157です。 標準体重は51.300000000000004です。 [egi@taro]$上記のような処理ができるプログラムは、以下のように繰り返し命令を使って書けます。 繰り返し命令の詳細は、次に学習しますが、ここでは入力処理が、
// 数値を入力し、計算結果を表示する。
import java.io.*;
public class JcInput4{
public static void main(String[] arges) throws IOException {
String sincho;
int dt;
BufferedReader kbd = new BufferedReader(new InputStreamReader(System.in));
while(true){
System.out.print("身長?");
sincho = kbd.readLine();
try{
dt = Integer.parseInt(sincho);
System.out.println("身長は"+sincho+"です。");
System.out.println("標準体重は"+((dt-100)*0.9)+"です。");
}
catch(NumberFormatException e){
System.out.println("データが誤りで計算できません");
continue;
}
break;
}
}
}
|
|
|