「hello world」を表示する謎のコードが話題に

Java

海外メジャープログラミング Q and A サイトStack Overflowで、「hello world」を表示する謎のJavaコードが話題となっています(java - Why does this code print "hello world"? - Stack Overflow)。

話題のソースコードの内容は以下の通り。

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();
}

このstaticメソッドrandomString()を次のように呼び出すと、なぜか「hello world」と表示されてしまいます。

System.out.println(randomString(-229985452) + " " + randomString(-147909649));

ベストアンサーによると、java.util.Randomが特定のシードで初期化されるため、ランダム関数が同じ値を返し、その結果ある特定の文字列が返ることになる(この場合、hello world)と解説されています。

たしかに毎回同じシード値でRandom関数を初期化してしまい、同じランダム値を取得してしまうミスはありがちですが、こんな文字列が出力されるとは…。

コメント欄ではもっとディープな議論が繰り広げられているので気になった人はリンクをたどってみてください。

スポンサーリンク