Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 收集的有效性。洗牌_Java_Collections_Random - Fatal编程技术网

Java 收集的有效性。洗牌

Java 收集的有效性。洗牌,java,collections,random,Java,Collections,Random,我试图用java创建一个彩票模拟器,我开始担心生成的数字是否足够随机 例如,我生成不重复的白球编号的代码如下所示 public static int[] genWhiteNums() { int[] whitePicks = new int[5]; Collections.shuffle(whiteDrawNums); //whiteDrawNums is an arraylist of numbers 1-59 for(int i = 0; i < 5; i++

我试图用java创建一个彩票模拟器,我开始担心生成的数字是否足够随机

例如,我生成不重复的白球编号的代码如下所示

public static int[] genWhiteNums()
{
    int[] whitePicks = new int[5];
    Collections.shuffle(whiteDrawNums); //whiteDrawNums is an arraylist of numbers 1-59

    for(int i = 0; i < 5; i++)
    {
        whitePicks[i] = whiteDrawNums.get(i);
    }
    whiteDrawNums = createWhiteNums(); //Reordering

    return whitePicks;
}
publicstatic int[]genWhiteNums()
{
int[]白选=新int[5];
Collections.shuffle(whiteDrawNums);//whiteDrawNums是数字1-59的数组列表
对于(int i=0;i<5;i++)
{
whitePicks[i]=whiteDrawNums.get(i);
}
whiteDrawNums=createWhiteNums();//重新排序
返回白名单;
}

从Collections.shuffle随机选取前5个值是否足够?

Collections.shuffle执行以下操作。如果它足够随机的话,这是你需要考虑的问题。根据文件,如果它足够随机,这是你的考虑

使用默认源随机排列指定的列表 随机性。所有置换都以近似相等的速度发生 可能性

在上述描述中使用“近似”对冲,因为 随机数的默认源仅近似为无偏源 由独立选择的位组成。如果它是一个完美的来源 选择位,则算法将选择具有完美匹配的置换 一致性

它使用一个线性时间洗牌算法。我认为它是随机的,足以满足大多数人的需要。

根据文件

使用默认源随机排列指定的列表 随机性。所有置换都以近似相等的速度发生 可能性

在上述描述中使用“近似”对冲,因为 随机数的默认源仅近似为无偏源 由独立选择的位组成。如果它是一个完美的来源 选择位,则算法将选择具有完美匹配的置换 一致性

它使用一个线性时间洗牌算法。我认为它的随机性足以满足大多数人的需要。

使用
random\nextInt()
从随机收集中挑选分布充分的随机值

public static int[] genWhiteNums() {
    Random random = new Random();

    int[] whitePicks = new int[5];
    Collections.shuffle(whiteDrawNums);  // Arraylist 1-59

    for (int i = 0; i < whitePicks.length; i++) {
        whitePicks[i] = whiteDrawNums.get(
                        random.nextInt(i != 4 ? 12 : 11) + 12 * i);
    }

    whiteDrawNums = createWhiteNums(); // Reordering
    return whitePicks;
}
publicstatic int[]genWhiteNums(){
随机=新随机();
int[]白选=新int[5];
Collections.shuffle(whiteDrawNums);//数组列表1-59
for(int i=0;i
它将可用索引(0-58)分成4组,每组12个,最后一组11个,并在循环的每个迭代中选择一个随机索引。这应该足以满足您对随机性的需求。

使用
Random#nextInt()
从随机收集中选取分布充分的随机值

public static int[] genWhiteNums() {
    Random random = new Random();

    int[] whitePicks = new int[5];
    Collections.shuffle(whiteDrawNums);  // Arraylist 1-59

    for (int i = 0; i < whitePicks.length; i++) {
        whitePicks[i] = whiteDrawNums.get(
                        random.nextInt(i != 4 ? 12 : 11) + 12 * i);
    }

    whiteDrawNums = createWhiteNums(); // Reordering
    return whitePicks;
}
publicstatic int[]genWhiteNums(){
随机=新随机();
int[]白选=新int[5];
Collections.shuffle(whiteDrawNums);//数组列表1-59
for(int i=0;i

它将可用索引(0-58)分成4组,每组12个,最后一组11个,并在循环的每个迭代中选择一个随机索引。这应该足以满足您对随机性的需求。

对于您的目的,什么是随机的?你需要定义一下。random.org有一个你可以使用的api,它免费提供少量的随机数据。我同意格林纳的观点,在这种情况下,你肯定需要定义“足够随机”的含义。您希望它在从
whiteDrawNums
中选择不同的数字时是随机的,还是希望它在从该列表中选择数字时是随机的,或者您的意思是每次调用
getWhiteNums()
,您都会得到一个与以前生成的集总是不同的集?这三个问题有完全不同(但互补)的答案。看看我的最新答案。现在,它可以让您从已经洗牌的集合中选择足够分布的值。对于您的目的,什么是足够随机的?你需要定义一下。random.org有一个你可以使用的api,它免费提供少量的随机数据。我同意格林纳的观点,在这种情况下,你肯定需要定义“足够随机”的含义。您希望它在从
whiteDrawNums
中选择不同的数字时是随机的,还是希望它在从该列表中选择数字时是随机的,或者您的意思是每次调用
getWhiteNums()
,您都会得到一个与以前生成的集总是不同的集?这三个问题有完全不同(但互补)的答案。看看我的最新答案。现在,它可以让您从已经洗牌的集合中选择分布充分的值。