10代と話して驚いたこと

値により、各種貨幣の最小枚数を計算するソースを書きました。
入力チェックのメソッド(下記の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 + "枚");

}
}

A 回答 (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/
何で\が重なるかは分かるよね。

※インデントに漢字空白を使っているので、コピペすると、
 コンパイルエラーになります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/09/09 16:45

こんにちは。



public static void main(String args[]) {
 if ( isHalfNum(args[0]) ) {
  int yen = Integer.parseInt(args[0]);
 }
}

こんな具合でしょうか。
isHalfNumが真の場合は実行する感じです。

ただ、どのようにエラー処理したいかによって入れ方は変わると思います。

この回答への補足

イメージつけましたが、実際やるとエラーがいっぱい出てきました。

入力した値は半角数字の場合は実行、違う場合はエラーメッセージの「半角数値を入力してください」を表示させたいです。

よかったら、具体的に入れた後のソースを教えていただけますか

補足日時:2009/09/09 09:18
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報