• ベストアンサー

入力値のチェック

値により、各種貨幣の最小枚数を計算するソースを書きました。 入力チェックのメソッド(下記のisHalfNum)をいれたいですが、 タイミングと修正するべきところがわからないです。 教えて頂きたいです。 public static boolean isHalfNum(String str) { if (str == null || !str.matches("^[0-9]+$")) { // 半角数字正規表現に一致しない場合、エラー return false; } return true; } ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 自分が書いたソース: public class Ex { public static final int[] NOTE_TYPES = {10000,5000,1000}; public static final int[] COIN_TYPES = {500,100,50,10,5,1}; public static int getNoteCount(int yen) { int[] countNote = new int[NOTE_TYPES.length]; for (int i = 0; i < NOTE_TYPES.length; i++) { countNote[i] = yen / NOTE_TYPES[i]; //商 yen = yen % NOTE_TYPES[i]; //剰余 if(yen < 1000){ int yen_nokori = yen; } } int samNote = 0 ; for(int i:countNote) samNote +=i; return samNote; } public static int getCoinCount(int yen_nokori) { int[] countCoin = new int[COIN_TYPES.length]; for (int i = 0; i < COIN_TYPES.length; i++) { countCoin[i] = yen_nokori / COIN_TYPES[i]; //商 yen_nokori = yen_nokori % COIN_TYPES[i]; //剰余 } int samCoin = 0 ; for(int i:countCoin) samCoin +=i; return samCoin; } public static void main(String args[]) { int yen = Integer.parseInt(args[0]); int samNote = getNoteCount(yen); int samCoin = getCoinCount(yen_nokori); System.out.println("紙幣:\t" + samNote + "枚"); System.out.println("硬貨:\t" + samCoin + "枚"); } }

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

>int yen = Integer.parseInt(args[0]); ここで、args[0]の中に数字以外が入っていると例外になる。 従って、これより前に字類チェックを行う必要がある。 とっ、その前にコマンドラインパラメータを指定せずに実行した 場合はargsは空配列なので、args[0]自体が配列範囲外になる。 public static void main(String args[]) {   String str;   if ( args.length > 0 ) {     str = args[0];   }   else {     ★エラーにするか、標準入力から金額を入力する。→str      以前にコード書いていたよね。   }   if ( ! isHalfNum(str) ) {     ★エラーメッセージ表示     System.exit(1); //ここでプログラムは終了する   }   int yen;   try {     yen = Integer.parseInt(str);   }   catch ( NumberFormatException e ) {     System.out.println("数値が範囲外です");     System.exit(2); //ここでプログラムは終了する   }   ★あとは以前の通り 数値変換だけど、intに入りきらない値だと例外になるので、やはり、 try~catchは必要になる。intの範囲:-2147483648~2147483647 また、正規表現だが、「数字以外を見つけたらアウト」なのでは? よって、以下のようになる。 if (str == null || str.matches("\\D")) {   // 半角数字正規表現に一致しない場合、エラー   return false; } http://java.sun.com/javase/ja/6/docs/ja/api/ 何で\が重なるかは分かるよね。 ※インデントに漢字空白を使っているので、コピペすると、  コンパイルエラーになります。

qiuzhaohua
質問者

お礼

ありがとうございました! 解決しました! 大変助かりました!

その他の回答 (1)

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 public static void main(String args[]) {  if ( isHalfNum(args[0]) ) {   int yen = Integer.parseInt(args[0]);  } } こんな具合でしょうか。 isHalfNumが真の場合は実行する感じです。 ただ、どのようにエラー処理したいかによって入れ方は変わると思います。

qiuzhaohua
質問者

補足

イメージつけましたが、実際やるとエラーがいっぱい出てきました。 入力した値は半角数字の場合は実行、違う場合はエラーメッセージの「半角数値を入力してください」を表示させたいです。 よかったら、具体的に入れた後のソースを教えていただけますか

関連するQ&A