数字のチェック

広告

次に入力された1番目と3番目の引数が数値かどうかをチェックします。

引数で文字列として渡されたきた値を数値型の変数に格納する時に下記の処理を行っていましたが、もしこの値が数値を表すような文字列でなかった場合は"例外"というものが発生します。

int val1 = 0;      /* 最初の数字 */
int val2 = 0;      /* 次の数字 */

val1 = Integer.parseInt(args[0]);
val2 = Integer.parseInt(args[2]);

前回のサンプルを使って、数値以外の値を入力してみましょう。

p3

上記のように、数値の形式をしていない文字列を、数値型の値に変換しようとした場合は、これは数値に変換できないよ、というエラー表示が出るわけです。問題となるのは、このエラー表示はプログラムを作っている人には分かりますけど、利用者の方はこのエラーが出てもチンプンカンプンだということです。

そこで、このエラー(正確には例外が発生したと言うのですけど、あまり気にしないで下さい。例外については別途詳しく見ていきます)が発生したら、この表示が出てプログラムが強制終了する前に、こちらの意図した表示を行うように変更してみましょう。

try{
    val1 = Integer.parseInt(args[0]);
    val2 = Integer.parseInt(args[2]);
}catch(NumberFormatException e){
    System.out.println("Usage : java dentaku 数値 演算子 数値");
    System.out.println("数値でない値が入力されています");
    System.exit(0);  /* プログラムを終了する */
}

詳しい"例外"の説明は改めて行いますので、ここではこんな感じなんだということだけ見ておいて下さい。何か例外が起こりそうな処理を"try"と"catch"の間に記述します。そして、発生するであろう例外名(ここでは先ほどの実験で見たとおりNumberFormatExceptionという例外が発生する可能性があります)を"catch"の後に記述して、その後の"{"と"}"の間に例外が発生した時の処理を書いておきます。

サンプル

ではこの処理をサンプルに追加して見ます。

dentaku3.java

class dentaku3{
  public static void main(String args[]){
    int val1 = 0;  /* 最初の数字 */
    int val2 = 0;  /* 次の数字 */
    String ope;    /* 演算子 */

    if (args.length != 3){
      System.out.println("Usage : java dentaku 数値 演算子 数値");
      System.out.println("演算子は kake waru tasu hiku の4つです");
      System.exit(0);  /* プログラムを終了する */
    }

    try{
      val1 = Integer.parseInt(args[0]);
      val2 = Integer.parseInt(args[2]);
    }catch(NumberFormatException e){
      System.out.println("Usage : java dentaku 数値 演算子 数値");
      System.out.println("数値でない値が入力されています");
      System.exit(0);  /* プログラムを終了する */
    }

    ope = args[1];

    String opeStr[] = {"kake", "waru", "tasu", "hiku"};
    boolean errFlag = true;

    for (int i = 0 ; i < 4 ; i++){
      if (ope.equals(opeStr[i])){
        errFlag = false;
      }
    }

    if (errFlag == true){
      System.out.println("演算子は kake waru tasu hiku の4つです");
      System.exit(0);  /* プログラムを終了する */
    }

    System.out.println("入力された式は " + val1 + " " + ope + " " + val2 + " です");
  }
}

実行結果は下記のようになります。

p4

上記のように数値ではない値が入力された場合でも、先ほどのようにエラーコードがだらだらと表示されずに、こちらの意図した表示だけが行われてプログラムが終了しています。

では最後に計算結果を表示させてみましょう。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。