■ 誤った値の入力 |
上記で説明したいずれの方法で入力した場合も、値は文字列としてコンピュータに入力されます。したがって、入力された値が数値でなくても入力時には問題になりません。 しかし、その入力値を数値に変換しようとすると、例えば 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; } } } |
|