JAVAの初心者向け問題1-☆3:ショッピングカートシステムを作ろう
この問題を解くために必要な知識:
コメントの書き方、変数と定数、基本データ型とプリミティブ型、四則演算と論理演算、入力と出力、配列、分岐処理(if、if~else、switch)、繰り返し処理(for、while、do~while)
<<前の問題 | 問題集Top |
次の問題>> |
JAVA練習問題1-☆3_ショッピングカートシステムを作ろう
ショッピングカートシステムを作成してください。このシステムでは、ユーザーが複数の商品を選択し、その合計金額を計算します。
ユーザーは商品番号と購入数量を入力し、他の商品を購入するかどうかを選ぶことができます。
最後に、全ての購入が完了した後、合計金額が表示されます。
この問題の要件
以下の要件に従ってプログラムを完成させてください。
- 商品の名前と価格を以下のように定義してください:
- りんご:100円
- バナナ:150円
- オレンジ:200円
- ぶどう:300円
- ユーザーが商品番号を入力して選択し、次に購入する数量を入力するようにしてください。
- 入力された商品番号が有効な範囲(1から4まで)かどうかをチェックしてください。
- ユーザーが他の商品を購入するかどうかを確認し、続ける場合は同様の手順を繰り返してください。
- 全ての購入が完了した後、合計金額を表示してください。
ただし、以下のような実行結果となること。
----- ↓出力される結果の例↓ -----
ショッピングカートシステムへようこそ! 商品リスト: 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.import文
1-1.Scannerクラスのインポート
2.ShoppingCartクラスの定義
3.mainメソッド
3-1.Scannerオブジェクトの作成
3-2.商品リストの定義(配列 products と prices)
3-3.合計金額の初期化(totalAmount)
3-4.ショッピングカートシステムの開始を通知(System.out.println)
3-5.ユーザーが他の商品を追加するかどうかを確認するためのフラグ(boolean shopping)
3-6.ユーザーが商品を選び続ける限り繰り返すためのwhileループ
3-6-1.商品リストの表示(forループとSystem.out.println)
3-6-2.ユーザーに商品番号を入力してもらう(System.out.printとscanner.nextInt)
3-6-3.商品番号の有効性を確認(if文)
3-6-4.ユーザーに購入する数量を入力してもらう(System.out.printとscanner.nextInt)
3-6-5.合計金額を計算(小計を求め、totalAmountに加算)
3-6-6.選択した商品と数量の表示(System.out.println)
3-6-7.ユーザーに他の商品を購入するかどうかを尋ねる(System.out.printとscanner.nextInt)
3-6-8.他の商品を購入しない場合はshoppingフラグをfalseに設定してwhileループを終了
3-7.合計金額の表示(System.out.println)
3-8.ショッピングカートシステムの終了を通知(System.out.println)
3-9.Scannerオブジェクトを閉じる(scanner.close)
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
import java.util.Scanner; public class ShoppingCart { public static void main(String[] args) { // Scannerオブジェクトを作成し、標準入力を読み取る Scanner scanner = new Scanner(System.in); // 商品の名前と価格を配列で定義 String[] products = {"りんご", "バナナ", "オレンジ", "ぶどう"}; int[] prices = {100, 150, 200, 300}; // 合計金額を初期化 int totalAmount = 0; // ショッピングカートシステムの開始を通知 System.out.println("ショッピングカートシステムへようこそ!"); // ユーザーが他の商品を追加するかどうかを確認するためのフラグ boolean shopping = true; // ユーザーが商品を選び続ける限り繰り返す while (shopping) { // 商品リストを表示 System.out.println("商品リスト:"); for (int i = 0; i < products.length; i++) { System.out.println((i + 1) + ": " + products[i] + " - " + prices[i] + "円"); } // ユーザーに商品番号を入力してもらう System.out.print("購入する商品の番号を入力してください: "); /* ***ここにscannerを使用して商品番号を取得するコードを書いてください*** */ // 商品番号の有効性を確認 /* ***ここに商品番号の有効性を確認するif文を書いてください*** */ // ユーザーに購入する数量を入力してもらう System.out.print("購入する数量を入力してください: "); /* ***ここにscannerを使用して購入数量を取得するコードを書いてください*** */ // 合計金額を計算 /* ***ここに小計を計算して合計金額に加算するコードを書いてください*** */ // 選択した商品と数量を表示 /* ***ここに選択した商品とその小計を表示するコードを書いてください*** */ // ユーザーに他の商品を購入するかどうかを尋ねる System.out.print("他の商品を購入しますか?(はい: 0, いいえ: 1): "); /* ***ここにscannerを使用して他の商品を購入するかどうかの回答を取得し、shoppingフラグを更新するコードを書いてください*** */ } // 合計金額を表示 System.out.println("合計金額: " + totalAmount + "円"); System.out.println("お買い上げありがとうございました!"); // スキャナーを閉じてリソースを解放 scanner.close(); } }
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
解答例
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
********************
import java.util.Scanner; public class ShoppingCart { public static void main(String[] args) { // Scannerオブジェクトを作成し、標準入力を読み取る Scanner scanner = new Scanner(System.in); // 商品の名前と価格を配列で定義 String[] products = {"りんご", "バナナ", "オレンジ", "ぶどう"}; int[] prices = {100, 150, 200, 300}; // 合計金額を初期化 int totalAmount = 0; // ショッピングカートシステムの開始を通知 System.out.println("ショッピングカートシステムへようこそ!"); // ユーザーが他の商品を追加するかどうかを確認するためのフラグ boolean shopping = true; // ユーザーが商品を選び続ける限り繰り返す while (shopping) { // 商品リストを表示 System.out.println("商品リスト:"); for (int i = 0; i < products.length; i++) { System.out.println((i + 1) + ": " + products[i] + " - " + prices[i] + "円"); } // ユーザーに商品番号を入力してもらう System.out.print("購入する商品の番号を入力してください: "); int productNumber = scanner.nextInt(); // 商品番号の有効性を確認 if (productNumber < 1 || productNumber > products.length) { System.out.println("無効な商品番号です。もう一度入力してください。"); continue; } // ユーザーに購入する数量を入力してもらう System.out.print("購入する数量を入力してください: "); int quantity = scanner.nextInt(); // 合計金額を計算 int itemTotal = prices[productNumber - 1] * quantity; totalAmount += itemTotal; // 選択した商品と数量を表示 System.out.println("選択した商品: " + products[productNumber - 1] + " 数量: " + quantity + " 小計: " + itemTotal + "円"); // ユーザーに他の商品を購入するかどうかを尋ねる System.out.print("他の商品を購入しますか?(はい: 0, いいえ: 1): "); int answer = scanner.nextInt(); if (answer == 1) { shopping = false; // 繰り返しを終了する } } // 合計金額を表示 System.out.println("合計金額: " + totalAmount + "円"); System.out.println("お買い上げありがとうございました!"); // スキャナーを閉じてリソースを解放 scanner.close(); } }
********************
コードの解説
- スキャナーオブジェクトの作成:
Scanner scanner = new Scanner(System.in);
- 標準入力からデータを読み取るために
Scanner
クラスのオブジェクトを作成します。
- 商品名と価格の配列:
String[] products = {"りんご", "バナナ", "オレンジ", "ぶどう"};
int[] prices = {100, 150, 200, 300};
- 商品名と価格をそれぞれ配列で定義します。
- 合計金額の初期化:
int totalAmount = 0;
- 合計金額を格納する変数
totalAmount
を初期化します。
- ショッピングフラグの初期化:
boolean shopping = true;
- ショッピングを続けるかどうかを制御するフラグを初期化します。
- ショッピングの繰り返し処理:
while (shopping) { ... }
- ユーザーがショッピングを続ける限りループを繰り返します。
- 商品リストの表示:
for (int i = 0; i < products.length; i++) { ... }
- 商品リストを表示するために
for
ループを使用します。
- 商品番号の入力と検証:
int productNumber = scanner.nextInt();
- ユーザーに商品番号を入力してもらい、その有効性を検証します。
- 購入数量の入力:
int quantity = scanner.nextInt();
- ユーザーに購入数量を入力してもらいます。
- 小計の計算と合計金額の更新:
int itemTotal = prices[productNumber - 1] * quantity;
totalAmount += itemTotal;
- 小計を計算し、合計金額を更新します。
- 他の商品を購入するかどうかの確認:
int answer = scanner.nextInt();
- ユーザーに他の商品を購入するかどうかを尋ね、
shopping
フラグを更新します。
- 合計金額の表示:
System.out.println("合計金額: " + totalAmount + "円");
- 合計金額を表示します。
- スキャナーの閉鎖:
scanner.close();
- プログラムの最後で
Scanner
オブジェクトを閉じ、リソースを解放します。
<<前の問題 |
問題集Top |
次の問題>> |
この問題への質問・コメント
この問題を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。