The following print statement would print "hello world". Could anyone explain this?
System.out.println(randomString(-229985452) + " " + randomString(-147909649));
And randomString()
looks like this:
public static String randomString(int i) { Random ran = new Random(i); StringBuilder sb = new StringBuilder(); while (true) { int k = ran.nextInt(27); if (k == 0) break; sb.append((char)('`' + k)); } return sb.toString(); }
To generate random characters, we should use the rand() method. It generates integer values at random. This number is created using an algorithm associated with the specific time it is called and returns a succession of seemingly unrelated numbers.
The other answers explain why, but here is how.
Given an instance of Random
:
Random r = new Random(-229985452)
The first 6 numbers that r.nextInt(27)
generates are:
8 5 12 12 15 0
and the first 6 numbers that r.nextInt(27)
generates given Random r = new Random(-147909649)
are:
23 15 18 12 4 0
Then just add those numbers to the integer representation of the character `
(which is 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
When an instance of java.util.Random
is constructed with a specific seed parameter (in this case -229985452
or -147909649
), it follows the random number generation algorithm beginning with that seed value.
Every Random
constructed with the same seed will generate the same pattern of numbers every time.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With