こんにちは。ハンドルネーム「Javaを復習する初心者」です。このサイトはプログラミング言語Javaの復習・学習をするブログです。プログラムの開発・実行はEclipseで行ってます。
スポンサーリンク
お知らせ
  • 参考文献のページ作りました。
  • Amazon.co.jpアソシエイトに参加していますが、参考文献の紹介はもしもアフィリエイトに統一しました。
  • 2016年10月9日からは投稿ペースを落とします。週1回くらいにする予定です。
スポンサーリンク

硬貨の枚数を算出する

こんにちは。「Javaを復習する初心者」です。今回は金額に対して効果の枚数を計算するプログラムを書きました。

今回作ろうと思ったプログラムは以下のような動作のプログラムです。

  • 金額を入力する。
  • 1円玉から500円玉まで何枚でその金額を表すことができるか出力する。

硬貨を扱うクラス

一つのjavaファイルで作っても良かったのですが、硬貨クラスを作りました。

public class Coin {

    private String name;
    private int price;
    private int count;

    public Coin(int price) {
        super();
        this.name = price + "円玉";
        this.price = price;
    }

    public void addCount() {
        this.count ++;
    }

    public String getName() {
        return name;
    }

    public int getPrice() {
        return price;
    }

    public int getCount() {
        return count;
    }

}

フィールドは以下の使い方です。

フィールド名 用途
name

何円玉なのか表します。

price

何円硬貨なのか表します。

count

枚数を表します。

硬貨クラスの簡単な説明をします。コンストラクタはCoin(int price)の一つだけです。設定する値が100の場合、nameに「100円玉」が設定されます。フィールドのcountは特に設定していません。なのでインスタンス生成時には初期値の0が格納されます。addCountメソッドは枚数を1増やすメソッドです。必要な硬貨の枚数を計算するときに呼び出す想定です。あとはgetterメソッドです。

硬貨の枚数を決めるクラス

さて、硬貨の枚数を決めるクラスですが、フローは以下のようにしました。

  1. コンソールから金額を入力してもらう。
  2. 500円玉から順に以下の処理を繰り返す。
    1. [金額]*[枚数 + 1] <= 入力された金額の場合、以下の処理を繰り返す。
      1. 枚数を + 1する。
    2. 入力された金額から[金額] * [枚数]を引く。
  3. 500円玉から順に以下の処理をする。
    1. 以下を出力する。
      書式文字列 埋め字
      “%5s: %2d枚”

      コイン名、コイン枚数
    2. 改行を出力する。

以下がソースです。

import java.util.Scanner;

public class CalcCoin {

    public static void main(String[] args) {
        // 入力受付
        System.out.println("商品金額を入力してください。");
        Scanner scanner = new Scanner(System.in);
        int total =  scanner.nextInt();
        scanner.close();

        Coin[] coins = {
                new Coin(500),
                new Coin(100),
                new Coin(50),
                new Coin(10),
                new Coin(5),
                new Coin(1),
        };

        // 計算
        for (Coin coin : coins) {
            while (coin.getPrice() * (coin.getCount() + 1) <= total) {
                coin.addCount();
            }
            total -= coin.getPrice() * coin.getCount();
        }

        // 出力
        for (Coin coin : coins) {
            System.out.printf("%5s: %2d枚", coin.getName(), coin.getCount());
            System.out.println();
        }
    }

}

出力結果は入力した金額によって変わります。以下は一例です。

商品金額を入力してください。
4689
500円玉:  9枚
100円玉:  1枚
 50円玉:  1枚
 10円玉:  3枚
  5円玉:  1枚
  1円玉:  4枚

上記は「4689」が入力した値です。それぞれの硬貨の枚数が出力されました。