• 締切済み

選択により違う動作を実行する方法

与えられた値により、下記のように貨幣の枚数を求めるソースを書きました。 /** * 与えられた金額を貨幣にした時の紙幣と硬貨の枚数を算出し、表示する。 * @author zhaohua.qiu * */ public class Ex1 { /** 貨幣タイプの定義 */ /* 紙幣の金種 */ private static final int[] NOTE_TYPES = {10000,5000,1000}; /* 硬貨の金種 */ private static final int[] COIN_TYPES = {500,100,50,10,5,1}; /** * 入力を確認し、結果を表示する * @param arg * @param i 入力したパラメータを格納する変数 */ public static void main(String[] args) { /* コマンドラインパラメータを指定したかのチェック */ if ( ! checkNyuryoku(args) ) { System.out.println("コマンドで金額を入力してください"); System.exit(1); //ここでプログラムは終了する } /* 入力した金額は半角数字かのチェック */ if ( ! isHalfNum(args[0]) ) { System.out.println("半角数値ではありません"); System.exit(2); //ここでプログラムは終了する } /* 入力した数値範囲のチェック */ int yen = 0; try { yen = Integer.parseInt(args[0]);//入力した値をint型に変換 }catch ( NumberFormatException e ) { System.out.println("数値が範囲外です"); System.exit(3); //ここでプログラムは終了する } int sumNote = getMoneyCountByType(yen, NOTE_TYPES); int sumCoin = getMoneyCountByType(yen - getAmountByType(yen, NOTE_TYPES), COIN_TYPES); System.out.println("紙幣:\t" + sumNote + "枚"); System.out.println("硬貨:\t" + sumCoin + "枚"); } /** * コマンドラインパラメータをチェックするメソッド * @param args 判定対象 * @return 結果(true:入力した/false:未入力) */ private static boolean checkNyuryoku(String[] args) { if ( args.length > 0 ) { return true; } return false; } /** * 半角数字正規表現のチェックするメソッド * @param str 判定対象 * @return 結果(true:正常/false:異常) */ public static boolean isHalfNum(String str) { if (str == null || !str.matches("^[0-9]+$")) { return false; } return true; } /** * タイプ別の総金額を取得するメソッド * @param yen 計算する値 * @param types 貨幣のタイプ * @return タイプ別の総金額 */ private static int getAmountByType(int yen, int[] types) { int amount = 0; for (int i : types) { amount += i * Math.floor(yen / i); yen = yen % i; } return amount; } /** * タイプ別の総枚数を取得するメソッド * @param yen 計算する値 * @param types 貨幣のタイプ * @return タイプ別の総枚数 */ private static int getMoneyCountByType(int yen, int[] types) { int countMoney = 0; for (int i : types) { countMoney += Math.floor(yen / i); yen = yen % i; } return countMoney; } } 実行して、枚数を表示した後、続いて「具体的紙幣と硬貨の枚数を表示しますか?_(Y/N)」のように使用者に聞いて、Nを選択した場合プログラムを終了させ、Yを選択した場合は下記のソースを実行し、結果を表示したいです。 public class Ex2 { public static final int[] YEN_TYPES = {10000,5000,1000,500,100,50,10,5,1}; public static int[] getYenCount(int yen) { int[] count = new int[YEN_TYPES.length]; for (int i = 0; i < YEN_TYPES.length; i++) { count[i] = yen / YEN_TYPES[i]; //商 yen = yen % YEN_TYPES[i]; //剰余 } return count; } public static void main(String args[]) { int yen = Integer.parseInt(args[0]); int[] count = getYenCount(yen); for (int i = 0; i < YEN_TYPES.length; i++) { if(count[i] != 0) { System.out.println(YEN_TYPES[i] + "円\t" + count[i] + "枚"); } } } } どうすれば、使用者に入力させ、その入力した値により上記の命令を実行させられますか? 教えてください。

みんなの回答

回答No.2

Java 勉強中です。 java.util.Scanner が気に入ってます。 import java.util.*; public class QA5276088 {  private static Integer amount;  private static Scanner in;  public static int[][] kind = {   // 0 1 2 3 4 5 6 7 8 index   {10000, 5000, 1000, 500, 100, 50, 10, 5, 1},   { 0, 0, 0, 0, 0, 0, 0, 0, 0}};  private static int bills() {   int ret = 0;   for (int i = 0; i < 3; i++) { ret += kind[1][i]; }   return ret;  }  private static int coins() {   int ret = 0;   for (int i = 3; i < kind[0].length; i++) { ret += kind[1][i]; }   return ret;  }  private static void countKind() {   int am = amount;   for (int i = 0; i < kind[0].length; i++) {    kind[1][i] += Math.floorDiv(am, kind[0][i]);    am = Math.floorMod(am, kind[0][i]);   }  }  public static void main(String[] args) {   if (args.length <= 0) {    System.out.println("Usage: java THIS_CLASS amount");    System.exit(1);   }   try { amount = new Integer(args[0]); }   catch (Exception e) {    System.out.println("Required numeric");    System.exit(2);   }   countKind();   System.out.println("Bill: " + bills());   System.out.println("Coin: " + coins());   System.out.print("Kind? [y/n] ");   in = new Scanner(System.in);   String command = in.nextLine(); in.close();   if (command.equalsIgnoreCase("y")) {    for (int i = 0; i < kind[0].length; i++) {     System.out.println("" + kind[0][i] + " yen: " + kind[1][i]);    }   }  } }

  • kichiwave
  • ベストアンサー率41% (10/24)
回答No.1

一つのプログラムの中で実行させたいのであれば mainは一つだけですね 使用者に入力させたいのであれば 標準入力について調べてみてください その標準入力に値によって 後半の処理だけを実行させればいいと思います。

qiuzhaohua
質問者

補足

有難うございます。 イメージあんまりつけないですが、 ソースを変えてもかまいませんので、 よろしければ具体的に教えていただけますか

関連するQ&A

専門家に質問してみよう