I recently came across the
Math.random( )
class in Java. (And) I was wondering about the class. For example, I'm trying to write a dice game that needs random numbers from 1 to 6 each "roll". This is where math.random( ) comes in. This line of code:
int random_num = (int) (Math.random() * 6) + 1;
CAN generate random numbers between 1 to 6.
My problem lies at
(Math.random() * 6)
here.
I know how this code works, how Math.random() generates a double value between 0.0 to 1.0. And how it multiplied by 6, and was rounded in the end.
I was however, puzzled why a random number (say 0.78396954122) multiplied by 6 could become a random number between 1 to 6. Supposedly the random number 0.78396954122 multiplied by 6, is always 6, right? There's no way a 2.78396954122 can suddenly pop up!
I'm a complete noob at Java and would appreciate if you could help explain this.
Thanks...in advance!
I was however, puzzled why a random number (say 0.78396954122) multiplied by 6 could become a random number between 1 to 6. Supposedly the random number 0.78396954122 multiplied by 6, is always 6, right?
No. 0.78396954122 * 6 is 4.70381724732 which when truncated by (int)
becomes 4 which then becomes 5 when the + 1
is done.
Similarly, Math.random
might return 0.2481654 which when multiplied by 6 is 1.4889924, which (int)
truncates to 1, and then becomes 2 thanks to the + 1
.
If it were, say, 0.0485847 * 6, that would be 0.2915082, which (int)
truncates to 0, which becomes 1 thanks to the + 1
.
The lowest value Math.random
will ever return is 0.0, which is truncated to 0 by (int)
. 0 * 6 is 0, which becomes 1 after the + 1
. The highest value Math.random
will ever return is 0.99999999(etc) (e.g.,. it will be < 1
). Multiplying that by 6 gives us 5.999999(etc) which is truncated to 5 by (int)
, and then turned into 6 by + 1
.
So that's how we get the range 1-6 from that code.
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments