我目前正試圖生成一個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