Java简单彩票计划

ber*_*rkc 3 java arrays

我试图创建一个简单的彩票计划.这是一个问题:它仍然打印相同的数字.例如,我得到了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] + " ");

}
Run Code Online (Sandbox Code Playgroud)

Pet*_*rey 7

您在检查时更改随机数.您需要选择一个随机数并检查它是否存在.

BTW较短的方法是使用shuffle.

// give me all the number 1 to 50
List<Integer> list = IntStream.range(1, 51).boxed().collect(Collectors.toList());
// shuffle them.
Collections.shuffle(list);
// give me the first 6
System.out.println(list.subList(0, 6));
Run Code Online (Sandbox Code Playgroud)


Flo*_*yle 7

您的代码有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] + " ");

}
Run Code Online (Sandbox Code Playgroud)