为什么这段代码给出了奇怪的结果?好随便喔?

Tea*_*App 0 java random

我有一段代码生成一些随机数并在控制台上打印出来.但是我很好奇它打印的图案,例如,

import java.util.*;
public class Test
{
    public static void main(String[] args)
    {
        Random random = new Random(-6732303926L);
            for(int i=0;i<10;i++)
                System.out.println(random.nextInt(10)+" ");    
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:0 1 2 3 4 5 6 7 8 9 - 新行中的每个数字.

如果你改变这个代码!喜欢,

import java.util.*;
public class Test
{
    public static void main(String[] args)
    {
        Random random = new Random(-6732303926L);
            for(int i=0;i<10;i++)
                System.out.println(random.nextInt(11)+" ");    
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:8 9 2 2 10 3 8 7 0 10 - 新行中的每个数字.

0123456789的原因是什么,它根本不是随机的!?

Jon*_*eet 10

0123456789也是随机的,在这种情况下 - 它很可能会出现在14235682907,这无疑不会给你任何担忧.

你基本上发现了侥幸.如果您在第一种情况下打印 10个数字,则它们不会保留任何明显的顺序.

这就像掷硬币一样 - HHHHHHHH的模式可能与HHTHTTHH的确切模式一样; 有一个1 2 8各自的机会来了,因为在任何的8个步骤有它的50%的机会会错.但是第一个模式看起来像是坏了,而第二个模式却没有.


S.L*_*ica 7

我认为它是随机的...你正在使用特定的种子来实现这个random功能.您刚刚找到了将按顺序为您提供数字0 - 9的种子.

编辑:显然,这是算法:

java.util.Random类实现了通常所说的线性同余生成器(LCG).LCG基本上是以下形式的公式:数字i + 1 =(a*数字i + c)mod m

来源:这里