![](/img/trans.png)
[英]Consistent, Cross Platform (java .Net) PseudoRandom generator if seeded the same
[英]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.