繁体   English   中英

伪随机发生器每次都返回相同的位

[英]Pseudorandom Generator returns the same bits every time

我目前正在尝试生成由字符串中的位表示的64位数字。

制作完字符串后,我将使用字符串的一部分来生成统计信息。 但是,每次运行程序时,即使假定是随机的,它也会返回相同的统计信息。

因此,我进行了一些检查,看来Seed总是以-1出现。 我完全不知道如何解决此问题,因为我已经有一段时间没有接触编码了。

帮助将不胜感激^ _ ^

public static void main(String[] args) {
    long seed = (long) Math.floor((Math.random() * 0xFFFFFFFF)); // <-- The issue
    long result = (0x5D588B656C078965L * seed) + 0x0000000000269EC3L;
    String s = Long.toBinaryString(result);
    System.out.println(s + "," + s.length());

    int spdef = Integer.parseInt(s.substring(2, 7), 2);
    int spatk = Integer.parseInt(s.substring(8, 13), 2);
    int speed = Integer.parseInt(s.substring(14, 19), 2);
    int def = Integer.parseInt(s.substring(20, 25), 2);
    int atk = Integer.parseInt(s.substring(26, 31), 2);
    int hp = Integer.parseInt(s.substring(32, 37), 2);

    System.out.println("spdef\tspatk\tspeed\tdef\tatk\thp");
    System.out.println(spdef + "\t" + spatk + "\t" + speed +
            "\t" + def + "\t" + atk + "\t" + hp);
}

}

您指定了0xFFFFFFFF ,但这是一个int常量,等于-1 ,因此下限始终为-1 而是指定一个long文字,后缀L 0xFFFFFFFFL不是-1作为long ,它的2 ^ 32 - 1。

long seed = (long) Math.floor((Math.random() * 0xFFFFFFFFL));

对于一对夫妇,种子是:

3186506811
1401221963
1537111640

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM