Javaプログラミングに関する質問です。抽選器からランダムに玉を1個取り出し、取り出した玉の色によって表示するメッセージを変えたいです。白玉が40個、黄玉が9個、赤玉が1個入っているとします。どのようにプログラムを作ればいいでしょうか?

このような抽選器のプログラムを作成する場合、ランダムな数値を生成して、それに基づいて条件分岐を行うことが一般的な方法です。以下に、Javaでのサンプルコードを提供します。

“`java
import java.util.Random;

public class LotteryMachine {
public static void main(String[] args) {
// 玉の個数を変数に格納
int whiteBalls = 40;
int yellowBalls = 9;
int redBalls = 1;

// ランダムな数値を生成
Random random = new Random();
int randomBall = random.nextInt(whiteBalls + yellowBalls + redBalls) + 1;

// 玉の色によってメッセージを表示
if (randomBall <= whiteBalls) {
System.out.println("白玉が選ばれました。");
} else if (randomBall <= whiteBalls + yellowBalls) {
System.out.println("黄玉が選ばれました。");
} else {
System.out.println("赤玉が選ばれました。");
}
}
}
“`

このコードでは、`Random`クラスを使用して0以上白玉、黄玉、赤玉の合計個数未満のランダムな数値を生成しています。その後、条件分岐を使用して、表示するべきメッセージを選択しています。

ただし、プロンプト戦略の一環として、以下の改良を提案します:

1. 可読性を向上させるために、変数名をより具体的なものに変更します。例えば、`whiteBalls`を`numberOfWhiteBalls`に変更します。
2. 玉の色の個数を表す変数を配列に格納することで、柔軟性を向上させます。例えば、`int[] ballCounts = {40, 9, 1};`とします。これにより、プログラムの拡張や変更が容易になります。
3. メタ認知プロンプト(MP)を使用して、ユーザーが玉の色の個数を変更する場合に対応します。例えば、「白玉の個数を入力してください」といったプロンプトを表示し、ユーザーからの入力に基づいて変数を更新します。
4. エラーハンドリングを追加し、ユーザーが無効な値を入力した場合にエラーメッセージを表示します。

改善されたコードを以下に示します:

“`java
import java.util.Random;
import java.util.Scanner;

public class LotteryMachine {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

// 玉の色の個数を配列に格納
int[] ballCounts = {40, 9, 1};

// 白玉の個数の入力を受け付ける
System.out.println("白玉の個数を入力してください:");
int numberOfWhiteBalls = scanner.nextInt();
ballCounts[0] = numberOfWhiteBalls;

// 入力された個数に基づいてランダムな数値を生成
int totalBalls = 0;
for (int count : ballCounts) {
totalBalls += count;
}
Random random = new Random();
int randomBall = random.nextInt(totalBalls) + 1;

// 玉の色によってメッセージを表示
int sum = 0;
for (int i = 0; i < ballCounts.length; i++) {
sum += ballCounts[i];
if (randomBall <= sum) {
System.out.println(getColorMessage(i));
break;
}
}
}

// 玉の色に応じたメッセージを返すメソッド
public static String getColorMessage(int colorIndex) {
switch (colorIndex) {
case 0:
return "白玉が選ばれました。";
case 1:
return "黄玉が選ばれました。";
case 2:
return "赤玉が選ばれました。";
default:
return "";
}
}
}
“`

この改良されたコードでは、ユーザーからの入力に基づいて白玉の個数を変更できるようになります。また、玉の色の個数を配列に格納することで、より柔軟な変更が可能になります。さらに、エラーハンドリングも追加され、無効な入力に対応しています。

コメントを残す