Help us understand the problem. What is going on with this article?

Javaで作る自動販売機のサンプル

目的

Javaを使ってプログラミングの経験を積むこと

対象者

Javaの基本を学んだ初学者

達成目標

フローチャートと機能詳細を元にプログラミングができる。

フローチャート

image.png

機能詳細

・商品リスト初期化
商品は以下の3つ固定とする。
コーラ100円
オレンジジュース120円
水80円

・入金
1円単位で入金可能とする。
購入可能な最低金額が入金されるまで入金を促す。
(今回の場合、水の80円以上)

・商品選択
入金額の範囲で商品を表示する。
商品名で選択する。

・販売
選択した商品を提供する。

・課金
入金額から購入金額を引く。
釣銭を返す。

サンプルコード

package vm;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 商品の初期化
        Map<String, Integer> items = new HashMap<String, Integer>();
        items.put("コーラ", 100);
        items.put("オレンジジュース", 120);
        items.put("水", 80);

        // 購入最低金額の場合、追加入金
        int deposit = 0;
        int minSaleAmount = -1;
        Scanner scanner = new Scanner(System.in);
        do {
            // 入金処理
            System.out.println("お金を入れて下さい。");
            deposit = deposit + scanner.nextInt();

            // 金額チェック(最低購入金額)
            int loopCount = 0;
            for (String itemKey: items.keySet()) {
                if(loopCount == 0 || minSaleAmount > items.get(itemKey)) {
                    minSaleAmount = items.get(itemKey);
                }
                loopCount++;
            }
        } while(deposit < minSaleAmount);

        // 商品選択
        System.out.println("商品を選択してください。");
        Map<String, Integer> availablePurchases = new HashMap<String, Integer>();
        for (String itemKey: items.keySet()) {
            if(deposit >= items.get(itemKey)) {
            System.out.println(itemKey + ":" + items.get(itemKey) + "円");
            availablePurchases.put(itemKey, items.get(itemKey));
            }
        }

        // 販売
        String itemName;
        while(true) {
            itemName = scanner.next();
            if (availablePurchases.containsKey(itemName)){
                break;
            }
            System.out.println("商品名の指定が誤っています。商品名を指定し直してください。");
        }
        scanner.close();
        System.out.println(itemName + "です!");

        // 課金機能
        deposit = deposit - availablePurchases.get(itemName).intValue();
        System.out.println("おつりは、" + deposit + "円です。");


    }

}

クラス分けしたバージョンを作成しました。
https://qiita.com/TakumiKondo/items/9f222f44c973bb2eaa06

TakumiKondo
34歳からIT業界に復帰。 言語:PHP, Java, JavaScript, TypeScript, VBA DB:MySQL その他:Tableau
https://loglog.xyz
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした