- ベストアンサー
入力値のチェック
値により、各種貨幣の最小枚数を計算するソースを書きました。 入力チェックのメソッド(下記の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 + "枚"); } }
- みんなの回答 (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/ 何で\が重なるかは分かるよね。 ※インデントに漢字空白を使っているので、コピペすると、 コンパイルエラーになります。
その他の回答 (1)
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 public static void main(String args[]) { if ( isHalfNum(args[0]) ) { int yen = Integer.parseInt(args[0]); } } こんな具合でしょうか。 isHalfNumが真の場合は実行する感じです。 ただ、どのようにエラー処理したいかによって入れ方は変わると思います。
補足
イメージつけましたが、実際やるとエラーがいっぱい出てきました。 入力した値は半角数字の場合は実行、違う場合はエラーメッセージの「半角数値を入力してください」を表示させたいです。 よかったら、具体的に入れた後のソースを教えていただけますか
お礼
ありがとうございました! 解決しました! 大変助かりました!