プロが教える店舗&オフィスのセキュリティ対策術

金種表のソースを書きました。
表示ループのif文(枚数0枚の場合表示しない)を実行しない場合は
正確の結果が出てくれるんですが、
このまま実行したら、たとえば引数は222の場合は
実行した結果は 「100円 2枚」、10円と1円の枚数を表示してくれなっかです。

原因を教えて頂けますか?
ループのどこが間違えたのがわかりません…

import java.io.*;

public class ex1 {
public static final int[] YEN_TYPES = {10000,5000,1000,500,100,50,10,5,1};
public static int[] getYenCount(int yen, int[] yentype) {
int[] count = new int[yentype.length];
for (int i = 0; i < yentype.length; i++) {
count[i] = yen / yentype[i]; //商
yen = yen % yentype[i]; //剰余
}
return count;
}

public static void main(String args[]) throws IOException {
int yen = Integer.parseInt(args[0]);
int[] count = getYenCount(yen, YEN_TYPES);
for (int i = 0; i < YEN_TYPES.length; i++) {
if(count[i] == 0) {
i++;
}else{
System.out.println(YEN_TYPES[i] + "円\t" + count[i] + "枚");
}
}
}
}

A 回答 (2件)

気になる点も含めて



>class ex1
クラス名は先頭を大文字に.class Ex1

>getYenCount(int, int[])
使用例から見て2番目の引数は必要ない.
というのもYEN_TYPESはstaticだから.
getYenCount(int)

>import java.io.*;
>throws IOException
これらは必要ない.
むしろNumberFormatExceptionなどを処理すべき.

>if文
必要ない.
for文は最後にインクリメントするから,もし0枚なら何もせず,次の紙幣または硬貨の処理へ移ればいい.
とうことで,for文以降は
if(count[i] != 0)
System.out.println(YEN_TYPES[i] + "円\t" + count[i] + "枚");
とすればいい.

この回答への補足

ありがとうございました!すごく参考になりました。

今は下記の入力チェックメソッドを入れたいですが、
タイミングはよくわかりません、下手に入れてコンパイルしたらエラーいっぱいが出てしまいました。
よろしければ、教えていただけますか?

public static boolean isHalfNum(String str) {

if (str == null || !str.matches("^[0-9]+$")) {
// 半角数字正規表現に一致しない場合、エラー
return false;
}
return true;
}

補足日時:2009/09/08 14:21
    • good
    • 0

if(count[i] == 0) {


/* i++; */
}else{
System.out.println(YEN_TYPES[i] + "円\t" + count[i] + "枚");
}
    • good
    • 0
この回答へのお礼

解決しました!ありがとうございました!!

解決しましたが、説明がいただけますか?
枚数=0の場合は、次の金種の枚数を表示する意味ではないですか?
なぜそこでi++を入れたらだめでしたか…

お礼日時:2009/09/08 13:37

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