Java 无法获取随机数

Java 无法获取随机数,java,arrays,random,Java,Arrays,Random,我一直在努力将员工人数变量设置为随机变量,但无法解决这个问题 public class Coin { private final int HEADS = 0; private final int TAILS = 1; private int face; private static int seed =0; private Random r; public Coin () { r = new Random(seed);

我一直在努力将员工人数变量设置为随机变量,但无法解决这个问题

public class Coin
{
    private final int HEADS = 0;
    private final int TAILS = 1;
    private int face;
    private static int seed =0;
    private Random r;
    public Coin ()
    {
        r = new Random(seed);
        flip();
        seed++;
    }
    public void flip ()
    {
        face = r.nextInt(2);
    }
    public int getFace()
    {
        return face;
    }
    public void setFace(int newFace)
    {
        face = newFace;
    }
    public boolean isHeads ()
    {
        return (face == HEADS);
    }
    public String toString()
    {
        String faceName;
        if (face == HEADS)
            faceName = "Heads";
        else
            faceName = "Tails";
        return faceName;
    }
    public static void main(String[] args)
    {
        Coin myCoin = new Coin();
       double randnumber =Math.random();
        int headCount=0;
        for (int i =1; i<=100; i++)
        {
            myCoin.flip();
            if(myCoin.isHeads())
            {
                headCount++;
            }
        }
        System.out.println("If I flip my coin 100 times, I get " + headCount + " heads.");
        headCount =0;
        for (int i =1; i<=100; i++)
        {
            Coin yourCoin = new Coin();
            yourCoin.flip();
            if(yourCoin.isHeads())
            {
                headCount++;
            }
        }
        System.out.println("If I flip 100 coins, I get " + headCount + " tails.");

    }
}
公共级硬币
{
私人最终整数头=0;
私人最终整数尾=1;
私人内部接口;
私有静态int seed=0;
私有随机r;
公众硬币()
{
r=新随机(种子);
翻转();
seed++;
}
公共空间翻转()
{
面=r.nextInt(2);
}
公共int getFace()
{
返回面;
}
公共void setFace(int newFace)
{
面=新面;
}
公共广告()
{
返回(面=头);
}
公共字符串toString()
{
字符串名称;
如果(面==头)
faceName=“Heads”;
其他的
faceName=“Tails”;
返回faceName;
}
公共静态void main(字符串[]args)
{
硬币=新硬币();
double randnumber=Math.random();
内部人员编制=0;
对于(int i=1;i您想要的是:
r=新随机(System.currentTimeMillis())

顺便说一句:给定某个种子,随机数生成器总是以相同的数字开始

例如,假设“随机数”生成器添加2以查找下一个随机数

种子=9 r(9)=11;r(11)=13;r(13)=15

然而,不同的种子将产生不同的数字串

种子=4
r(4)=6;

计算机编程中的随机数并不是真正的随机数。它们取决于一个种子值。如果每次给它相同的种子,每次都会得到相同的“随机”值序列

相反,如果您对Random使用空构造函数,它将基于当前系统nano时间为您创建种子。这样,您将减少使用相同种子启动的可能性

所以,正如其他人已经提到的,要么调用空的随机构造函数,要么在创建接受seed参数的随机变量之前自己创建一个伪随机seed

综上所述,最好假设JDK实现者已经考虑过如何最好地为您生成种子,所以您应该只使用空构造函数

如果您想查看Random类的Java源代码,可以搜索

grepcode java.util.Random.java 

查看JDK实现者如何创建种子。

通过直接在类中声明Random而不是在方法中声明Random来解决种子问题

private Random r = new Random();

public Coin()
{
    int x = r.nextInt();
    flip();
}

好的,是的,这就是使用种子的全部意义:这样你每次都能得到相同的结果。如果你不想每次都得到相同的结果,不要每次都用相同的初始输入给你的随机数生成器种子。设置种子的全部意义是保证每次运行程序都能得到相同的结果。
r=new random()
而不是
r=new Random(seed);
@JohnAsle,正如AzureFrog所说:“这就是使用种子的全部意义:这样每次都能得到相同的结果”。@JohnAsle:“你想要的”不一定。简单地使用
r=new Random();
,因为如果你不这样做,它会在内部生成种子。