我目前正试图生成一个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);
}
}
为什么你乘的Math.random()* 0xFFFFFFFF的? – 2014-09-05 22:29:34
获得0到0xFFFFFFFF之间的随机数 – OmniOwl 2014-09-05 22:30:11