1. ホーム
  2. java

[解決済み] Java簡易宝くじプログラム

2022-02-10 06:11:02

質問

簡単な宝くじプログラムを作ろうとしました。ここで問題なのは、やはり同じ数字が表示されてしまうことです。例えば、私は 33 21 8 29 21 10 を出力しています。乱数が生成されるたびに、その乱数がすでに生成されたものかどうかをチェックし、その後新しい乱数を生成しますが、その後はチェックしません。私はそれを行う方法を見つけることができませんでした。

public static void main(String[] args)
{

    int[] lottery = new int[6];
    int randomNum;

    for (int i = 0; i < 6; i++)
    {
        randomNum = (int) (Math.random() * 50); //Random number created here.
        for (int x = 0; x < i; x++)
        {
            if (lottery[i] == randomNum) // Here, code checks if same random number generated before.
            {
                randomNum = (int) (Math.random() * 50);//If random number is same, another number generated.
            }

        }
        lottery[i] = randomNum;
    }

    for (int i = 0; i < lottery.length; i++)
        System.out.print(lottery[i] + " ");

}

解決方法は?

あなたのコードには2つの問題があります。

  • をチェックすると lottery[i]randomNum が同じであれば、それは lottery[x]
  • の最初の数字と照合するのではなく、乱数を再生成する際に lottery .

以下は修正版です。

public static void main(String[] args) {

    int[] lottery = new int[6];
    int randomNum;

    for (int i = 0; i < 6; i++) {
        randomNum = (int) (Math.random() * 50); // Random number created here.
        for (int x = 0; x < i; x++) {
            if (lottery[x] == randomNum) // Here, code checks if same random number generated before.
            {
                randomNum = (int) (Math.random() * 50);// If random number is same, another number generated.
                x = -1; // restart the loop
            }

        }
        lottery[i] = randomNum;
    }

    for (int i = 0; i < lottery.length; i++)
        System.out.print(lottery[i] + " ");

}