我目前正在尝试生成一个由字符串中的位表示的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);
}
}
答案 0 :(得分:2)
您指定了0xFFFFFFFF
,但这是一个int
字面值,等于-1
,所以最低限度为-1
。请改为指定long
字面值,后缀为L
。 0xFFFFFFFFL
不是-1
long
,而是2 ^ 32 - 1.
long seed = (long) Math.floor((Math.random() * 0xFFFFFFFFL));
对于几次跑步,种子是:
3186506811
1401221963
1537111640