今天在 stackoverflow 上看到一个有趣的问题,问为什么这段代码会输出 “hello world”:
package com.example.demo;
import java.util.Random;
public class Demo {
public static void main(String[] args) {
System.out.println(randomString(-229985452) + " " + randomString(-147909649));
}
public static String randomString(int seed) {
Random ran = new Random(seed);
StringBuilder temp = new StringBuilder();
while (true) {
int k = ran.nextInt(27);
if (k == 0) break;
temp.append((char) ('`' + k));
}
return temp.toString();
}
}
主要原因是代码中的 Random
实际上是伪随机数
也就是说:只要是相同的种子和相同的算法就能得到相同的结果。
这里突然想到了之前玩的一款沙盒游戏:No Man’s Sky
(一款宇宙探索类游戏,这里的每个星球都是由一个唯一的种子按照算法生成的)