Skip to content

随机数永远输出hello world

import java.util.Random;

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println(randomString(-229985452)+" "+randomString(-147909649));
    }

    public static String randomString(int i) {
        Random ran = new Random(i);
        StringBuilder sb = new StringBuilder();
        for (int n = 0; ; n++) {
            int k = ran.nextInt(27);
            if (k == 0) break;
            sb.append((char)('`' + k));
        }
        return sb.toString();
    }

}

每次都会输出:hello world,这是为什么呢??

Random构造函数,参数seed是初始种子,相同的种子每次产生的随机数都一样,所以无论怎么随机,构造出来的随机数都一样。

new Random(-229985452)和new Random(-147909649)

会产生以下5位不为0的随机数:

8,5,12,12,15 23,15,18,12,4

程序里面用`符号相加,该符号代表96.

所以,有下面的结果:

8 + 96 = 104 --> h
5 + 96 = 101 --> e
12 + 96 = 108 --> l
12 + 96 = 108 --> l
15 + 96 = 111 --> o

23 + 96 = 119 --> w
15 + 96 = 111 --> o
18 + 96 = 114 --> r
12 + 96 = 108 --> l
4 + 96 = 100 --> d

一段很简单的程序却如此神奇,分享给别人,看他知道不?