Kotlin練習問題1-☆3:ショッピングカートシステムを作ろう

記事内に商品プロモーションを含む場合があります

Kotlinの初心者向け問題1-☆3:ショッピングカートシステムを作ろう

この問題を解くために必要な知識:
コメントの書き方、変数と定数、基本データ型、算術演算と論理演算、入力と出力、import文配列、分岐処理(if、if~else、when)、繰り返し処理(for、while、do~while)、Null安全、スマートキャスト

<<前の問題 問題集Top 次の問題>>

Kotlin練習問題1-☆3_ショッピングカートシステムを作ろう





シンプルなショッピングカートシステムを作成しましょう。

このプログラムでは、ユーザーが商品のリストから商品を選択し、その数量を指定することで、最終的な合計金額を計算します。

ユーザーが「もう一度購入する」を選択する限り、複数の商品をカートに追加することができます。

この問題の要件

以下の要件に従ってプログラムを作成してください。

  1. プログラムは、次のような商品とその価格を配列で定義してください:
    • “りんご”(100円)
    • “バナナ”(150円)
    • “オレンジ”(200円)
    • “ぶどう”(300円)
  2. ユーザーが購入したい商品を番号で選択できるようにし、その番号が有効かどうかを確認してください。
  3. ユーザーが購入する数量を入力し、その数量が有効かどうかを確認してください。
  4. 選択された商品の価格と数量に基づいて小計を計算し、それを合計金額に加算します。
  5. 購入した商品の詳細(商品名、数量、小計)を表示してください。
  6. ユーザーに「他の商品を購入するかどうか」を尋ね、「はい」を選択した場合は再度商品を選択できるようにします。「いいえ」を選択した場合は、合計金額を表示して終了します。

ただし、以下のような実行結果となること。

----- ↓出力される結果の例↓ -----

ショッピングカートシステムへようこそ!
商品リスト:
1: りんご - 100円
2: バナナ - 150円
3: オレンジ - 200円
4: ぶどう - 300円
購入する商品の番号を入力してください: 1
購入する数量を入力してください: 3
選択した商品: りんご 数量: 3 小計: 300円
他の商品を購入しますか?(はい: 0, いいえ: 1): 0

商品リスト:
1: りんご - 100円
2: バナナ - 150円
3: オレンジ - 200円
4: ぶどう - 300円
購入する商品の番号を入力してください: 2
購入する数量を入力してください: 2
選択した商品: バナナ 数量: 2 小計: 300円
他の商品を購入しますか?(はい: 0, いいえ: 1): 1
合計金額: 600円
お買い上げありがとうございました!

----- ↑出力される結果の例↑ -----

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。

1.main関数の定義
 1-1. productsとprices配列の定義
  1-1-1. 商品の名前を格納するproducts配列の定義
  1-1-2. 商品の価格を格納するprices配列の定義
 1-2. totalAmount変数の宣言と初期化
 1-3. ショッピングカートシステム開始のメッセージ表示
 1-4. shoppingフラグの宣言と初期化

2.ショッピングループの開始(whileループ)
 2-1. 商品リストの表示
  2-1-1. 商品リストを表示するためのforループ
 2-2. ユーザーから商品番号の入力を受け付け
  2-2-1. 商品番号の有効性をチェックし、無効な場合は再入力を促す
 2-3. ユーザーから購入する数量の入力を受け付け
  2-3-1. 購入数量の有効性をチェックし、無効な場合は再入力を促す
 2-4. 購入商品の小計を計算し、合計金額に加算
 2-5. 購入商品の詳細と小計を表示
 2-6. ユーザーに他の商品を購入するかどうかを確認し、shoppingフラグを更新

3.合計金額の表示と終了メッセージ
 3-1. 合計金額の表示
 3-2. ショッピングカートシステム終了のメッセージ表示

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

import kotlin.random.Random

fun main() {
    // 商品の名前と価格を配列で定義
    val products = arrayOf("りんご", "バナナ", "オレンジ", "ぶどう")
    val prices = arrayOf(100, 150, 200, 300)

    // 合計金額を初期化
    var totalAmount = 0

    // ショッピングカートシステムの開始を通知
    println("ショッピングカートシステムへようこそ!")

    // ユーザーが他の商品を追加するかどうかを確認するためのフラグ
    var shopping = true

    // ユーザーが商品を選び続ける限り繰り返す
    while (shopping) {
        // 商品リストを表示
        println("商品リスト:")
        for (i in products.indices) {
            println("${i + 1}: ${products[i]} - ${prices[i]}円")
        }

        // ユーザーに商品番号を入力してもらう
        print("購入する商品の番号を入力してください: ")
        /* 【穴埋め問題1】
        ここに商品番号を読み取るコードを書いてください。
        */

        // 商品番号の有効性を確認
        if (productNumber == null || productNumber < 1 || productNumber > products.size) {
            println("無効な商品番号です。もう一度入力してください。")
        } else {
            // ユーザーに購入する数量を入力してもらう
            print("購入する数量を入力してください: ")
            /* 【穴埋め問題2】
            ここに数量を読み取るコードを書いてください。
            */

            // 数量の有効性を確認
            if (quantity == null || quantity <= 0) {
                println("無効な数量です。もう一度入力してください。")
            } else {
                // 合計金額を計算
                val itemTotal = prices[productNumber - 1] * quantity
                totalAmount += itemTotal

                // 選択した商品と数量を表示
                println("選択した商品: ${products[productNumber - 1]} 数量: $quantity 小計: ${itemTotal}円")

                // ユーザーに他の商品を購入するかどうかを尋ねる
                print("他の商品を購入しますか?(はい: 0, いいえ: 1): ")
                /* 【穴埋め問題3】
                ここに他の商品を購入するかどうかを読み取るコードを書いてください。
                */
                shopping = (answer == 0)
            }
        }
    }

    // 合計金額を表示
    println("合計金額: ${totalAmount}円")
    println("お買い上げありがとうございました!")
}

 

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

解答例

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

********************

fun main() {
    // 商品の名前と価格を配列で定義
    val products = arrayOf("りんご", "バナナ", "オレンジ", "ぶどう")
    val prices = arrayOf(100, 150, 200, 300)

    // 合計金額を初期化
    var totalAmount = 0

    // ショッピングカートシステムの開始を通知
    println("ショッピングカートシステムへようこそ!")

    // ユーザーが他の商品を追加するかどうかを確認するためのフラグ
    var shopping = true

    // ユーザーが商品を選び続ける限り繰り返す
    while (shopping) {
        // 商品リストを表示
        println("商品リスト:")
        for (i in products.indices) {
            println("${i + 1}: ${products[i]} - ${prices[i]}円")
        }

        // ユーザーに商品番号を入力してもらう
        print("購入する商品の番号を入力してください: ")
        val productNumber = readLine()?.toIntOrNull()

        // 商品番号の有効性を確認
        if (productNumber == null || productNumber < 1 || productNumber > products.size) {
            println("無効な商品番号です。もう一度入力してください。")
            continue
        }

        // ユーザーに購入する数量を入力してもらう
        print("購入する数量を入力してください: ")
        val quantity = readLine()?.toIntOrNull()

        // 数量の有効性を確認
        if (quantity == null || quantity <= 0) {
            println("無効な数量です。もう一度入力してください。")
            continue
        }

        // 合計金額を計算
        val itemTotal = prices[productNumber - 1] * quantity
        totalAmount += itemTotal

        // 選択した商品と数量を表示
        println("選択した商品: ${products[productNumber - 1]} 数量: $quantity 小計: ${itemTotal}円")

        // ユーザーに他の商品を購入するかどうかを尋ねる
        print("他の商品を購入しますか?(はい: 0, いいえ: 1): ")
        val answer = readLine()?.toIntOrNull()
        if (answer == 1) {
            shopping = false // 繰り返しを終了する
        }
    }

    // 合計金額を表示
    println("合計金額: ${totalAmount}円")
    println("お買い上げありがとうございました!")
}

********************

正解コードの解説

この解説では、Kotlinで作成したシンプルなショッピングカートシステムのコードについて、各部分を初心者向けに説明します。

このコードを通じて、Kotlinの基本的な文法とプログラムの構造を理解することを目指します。

商品の名前と価格の定義

val products = arrayOf("りんご", "バナナ", "オレンジ", "ぶどう")
val prices = arrayOf(100, 150, 200, 300)

ここでは、商品名とその価格をそれぞれproductspricesという配列に格納しています。

配列は、複数の値を一つの変数にまとめて保持するためのデータ構造です。arrayOfという関数を使って、4つの商品名とその価格を定義しています。

合計金額の初期化

var totalAmount = 0

totalAmountという変数を定義し、0で初期化しています。この変数は、ユーザーが購入した商品の合計金額を保持します。

varを使って変数を定義することで、この変数の値を後から変更することが可能です。

ショッピングカートシステムの開始メッセージ

println("ショッピングカートシステムへようこそ!")

println関数を使って、ユーザーに対してメッセージを表示しています。

ここでは、プログラムが始まったことを知らせるメッセージを表示します。

商品の選択と数量の入力

while (shopping) {
    println("商品リスト:")
    for (i in products.indices) {
        println("${i + 1}: ${products[i]} - ${prices[i]}円")
    }

    print("購入する商品の番号を入力してください: ")
    val productNumber = readLine()?.toIntOrNull()

    if (productNumber == null || productNumber < 1 || productNumber > products.size) {
        println("無効な商品番号です。もう一度入力してください。")
    } else {
        print("購入する数量を入力してください: ")
        val quantity = readLine()?.toIntOrNull()

        if (quantity == null || quantity <= 0) {
            println("無効な数量です。もう一度入力してください。")
        } else {
            val itemTotal = prices[productNumber - 1] * quantity
            totalAmount += itemTotal
            println("選択した商品: ${products[productNumber - 1]} 数量: $quantity 小計: ${itemTotal}円")

            print("他の商品を購入しますか?(はい: 0, いいえ: 1): ")
            val answer = readLine()?.toIntOrNull()
            shopping = (answer == 0)
        }
    }
}

この部分では、whileループを使って、ユーザーが購入したい商品を選び、その数量を入力する手続きを繰り返します。

  • whileループは、shoppingtrueである限り繰り返されます。
  • 商品リストはforループで表示され、ユーザーは商品番号を選択します。
  • 入力された商品番号が有効かどうかをif文でチェックし、無効であれば再入力を促します。
  • 有効な商品番号が入力されると、次に購入する数量を入力します。
  • 数量も同様にチェックされ、有効であれば小計を計算し、合計金額に追加します。

合計金額の表示と終了メッセージ

println("合計金額: ${totalAmount}円")
println("お買い上げありがとうございました!")

最後に、これまでに購入した商品の合計金額を表示し、プログラムを終了します。

println関数を使って、合計金額と終了メッセージを表示します。

<<前の問題 問題集Top 次の問題>>

この問題への質問・コメント

この問題を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Kotlin練習問題集へ戻る
    トップページへ戻る