17

The following simple program in Java uses the java.util.Random class such that it always displays "hello world". The code snippet can be seen below.

package nomain;

import java.util.Random;

final public class J
{
    public static String randomString(int seed)
    {
        Random rand = new Random(seed);
        StringBuilder sb = new StringBuilder();

        for(int i=0;;i++)
        {
            int n=rand.nextInt(27);
            if (n==0)
            {
                break;
            }
            sb.append((char) ('`'+n));
        }
        return sb.toString();
    }

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

There is some surprise in that it always displays "hello world" even if the Random class is used that causes the random numbers to generate hence, the numbers should be changed on each run and the corresponding characters should be changed accordingly but it always displays only one stable string which is as mentioned above "hello world". Why does it happen?

Lion
  • 18,729
  • 22
  • 80
  • 110
Bhavesh
  • 4,607
  • 13
  • 43
  • 70
  • This probably has to do with the fact that random number generators are deterministic... meaning, if the same seed value is used, the same sequence will be generated every time. But I'm not positive. – Bryan Nov 08 '11 at 00:35
  • 8
    This question is not a duplicate of that question. That question is duplicate of this one instead. – Lion Mar 05 '13 at 17:55

1 Answers1

28

The answer is the parameter that's being passed in. That's used to seed the random number generator.

Random rand = new Random(seed);

PRNGs are not truly random - they are deterministic, but are designed to simulate randomness. For this reason they are better termed "pseudo-random number generators".

For a given seed, a PRNG will always generate the same number. It then likely uses its last result as an input to the next value, so by seeding the PRNG with a known value, you will always produce a known sequence of "random" numbers.

The numbers -229985452 and -147909649 are known to be seeds which will cause that particular PRNG to produce a sequence of 5 numbers that can be interpreted as "hello" and "world". If you were to change those numbers, you would get different 5-character sequences, but they would be the same for every run of the program, so long as the seed remains the same.

Tim Bender
  • 20,112
  • 2
  • 49
  • 58
Chris Heald
  • 61,439
  • 10
  • 123
  • 137