今天在 stackoverflow 上看到一个有趣的问题,问为什么这段代码会输出 “hello world”:

    1. package com.example.demo;
    2. import java.util.Random;
    3. public class Demo {
    4. public static void main(String[] args) {
    5. System.out.println(randomString(-229985452) + " " + randomString(-147909649));
    6. }
    7. public static String randomString(int seed) {
    8. Random ran = new Random(seed);
    9. StringBuilder temp = new StringBuilder();
    10. while (true) {
    11. int k = ran.nextInt(27);
    12. if (k == 0) break;
    13. temp.append((char) ('`' + k));
    14. }
    15. return temp.toString();
    16. }
    17. }

    主要原因是代码中的 Random 实际上是伪随机数
    也就是说:只要是相同的种子和相同的算法就能得到相同的结果。


    这里突然想到了之前玩的一款沙盒游戏:No Man’s Sky
    (一款宇宙探索类游戏,这里的每个星球都是由一个唯一的种子按照算法生成的)