前提・実現したいこと
お釣り計算のプログラムを実装したいです。
設計としては以下です。
2桁の十進数が与えられます。1つ目はアイテムの購入価格(Purchase Price: PP)です。2つ目は顧客が支払った現金(Cash: CH)です。 現在、レジの中には以下の紙幣と硬貨があります: 'PENNY': .01, 'NICKEL': .05, 'DIME': .10, 'QUARTER': .25, 'HALF DOLLAR': .50, 'ONE': 1.00, 'TWO': 2.00, 'FIVE': 5.00, 'TEN': 10.00, 'TWENTY': 20.00, 'FIFTY': 50.00, 'ONE HUNDRED': 100.00 このプログラムの目的は、顧客にお釣りとして返すべき紙幣/硬貨を計算することです。 入力: 標準入力から行を読み込む必要があります。各行にはセミコロンで区切られた2つの数値が含まれています。1つ目は購入価格(PP)で、2つ目は顧客が支払った現金(CH)です。 出力: 入力の各行に対して、顧客に返すお釣りを出力します。CH<PPの場合、ERRORを出力します。CH== PPの場合、ZEROを出力します。その他のケースは、顧客に返すべきお釣りの金額に相当する紙幣/硬貨を出力します。なお、回答はアルファベット順にソートする必要があります。 テスト 1 テストの入力 15.94;16.00 期待される出力 NICKEL,PENNY テスト 2 テストの入力 17;16 期待される出力 ERROR テスト 3 テストの入力 35;35 期待される出力 ZERO テスト 4 テストの入力 45;50 期待される出力 FIVE
この実装を完成させる手助けをしていただけませんでしょうか?
該当のソースコード
私が途中まで実装しているコードです。
型変換やプログラムの方向性で迷いながら実装しており、アドバイスいただけたらと思います。
java
1package douteki; 2 3import java.io.BufferedReader; 4import java.io.IOException; 5import java.io.InputStreamReader; 6import java.math.BigDecimal; 7import java.nio.charset.StandardCharsets; 8 9public class Main { 10 /** 11 * Iterate through each line of input. 12 */ 13 public static void main(String[] args) throws IOException { 14 InputStreamReader reader = new InputStreamReader(System.in, StandardCharsets.UTF_8); 15 BufferedReader in = new BufferedReader(reader); 16 String line; 17 while ((line = in.readLine()) != null) { 18 String[] n = line.split(";", 0); 19 20 BigDecimal val1 = new BigDecimal(n[0]); 21 BigDecimal val2 = new BigDecimal(n[1]); 22 BigDecimal bigDecimalAnswer = val2.subtract(val1); 23 24 double[] types = getMonayCount(bigDecimalAnswer, TYPES); 25 26 System.out.println("BigDecimal : " + bigDecimalAnswer); 27 } 28 } 29 30 public static final double[] TYPES = { 31 100.00, 50.00, 20.00, 10.00, 5.00, 2.00, 1.00, 0.50, 0.25, 0.10, 0.05, 0.01 32 }; 33 34 public double[] getMonayCount(double monay, double[] types) { 35 double[] type = new double[types.length]; 36 for (int i = 0; i < types.length; i++) { 37 while (monay >= types[i]) { 38 monay -= types[i]; 39 type[i] = types[i]; 40 } 41 } 42 return type; 43 } 44} 45 46//private String getMoneyNm() { 47// BigDecimal num; 48// switch (num){ 49// case 1: 50// System.out.println("非常に不満"); 51// break; 52// case 2: 53// System.out.println("少し不満"); 54// break; 55// case 3: 56// System.out.println("どちらとも言えない"); 57// break; 58// case 4: 59// System.out.println("少し満足"); 60// break; 61// case 5: 62// System.out.println("大変満足"); 63// break; 64//} 65// return num; 66//}
追記(2020.4.15.13時)
実行環境Java10,Tomcat9,Eclipse4.8.0,MacOS High Sierra10.13.6
実行しましたが、期待値が出力されません。実行も終わりません。(Macなのでコマンドは回答者様のおっしゃっているものとちがうかもしれませんので調査中です。)
入力が 15.92;16.00 の場合、期待される出力は何ですか?
NICKEL,PENNY,PENNY,PENNY
それとも NICKEL,PENNY*3
あるいは、NICKEL,THREE PENNIES?
>テスト 1
テストの入力
15.94;16.00
期待される出力
NICKEL,PENNY
記載にありますが、こちらですね!
15.94 ではなく 15.92 の場合はどうなるかと尋ねているんです。
硬貨の枚数は関係なく、種別だけということでしょうか?
入力のパターンだけの意識で構いません。汎用的でなくていいです。
後ろに付いているコメントはいったい...
switch文を使って数字と名前を一致させたくて使おうと思ってます。それ以前の部分をまずは解決してからですね
なるほど, switch 文のサンプルを待機させてあるわけですね.
そうです
回答2件
あなたの回答
tips
プレビュー