Reputation: 33
To generate a random number in a given range, we can write:
Random().nextInt((max - min) + 1) + min
.
I would like to know that is it equal to Random().nextInt(max + 1) - min
OR not.
Upvotes: 2
Views: 379
Reputation: 5575
It's not, just check the edge cases.
For min = 5
and max = 10
max - min + 1 = 6
, so nextInt((max - min) + 1)
results in minRand = 0
to maxRand = 5
. Add min and you get a number between 5 and 10.
max + 1 = 11
, so nextInt(max + 1)
results in minRand = 0
to maxRand = 10
. Substract min and you get a number between -5 and 5.
Upvotes: 2
Reputation: 17454
I would like to know that is it equal to Random().nextInt(max + 1) - min OR not.
Definitely not the same. You can sub in 2 numbers for max
and min
. You will see their differences.
Let your min be 7
and max be 9
:
Random().nextInt((max - min) + 1) + min
// Random().nextInt((9 - 7) + 1) + 7
// Random().nextInt(3) + 7
// Randomly generates (0, 1, 2) + 7
// Randomly generates (7, 8, 9)
Now swap 7 and 9 into the other code snippet:
Random().nextInt(9 + 1) - 7
// Random().nextInt(10) - 7
// Randomly generates (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) - 7
// Randomly generates (-7, -6, -5, -4, -3, -2, -1, 0, 1, 2)
One way for me to interpret how random.nextInt(val) works is by looking at the value of val
. Let say if the final evaluation of val
is 5. There are 5 possibilities to be randomly generated starting from 0. (i.e. 0,1,2,3,4)
Upvotes: 1
Reputation: 18002
It's not, but it seems not easy to explain.
(max - min) + 1
is the argument to nexInt
method. It is the value from 0 to the total of elements in that range (from min to max) and then this range is moved to start at the minimum value.
In other words, nextInt((max - min) + 1)
generates a random int from 0
to max-min
. And adding min
will result in a random integer from min
to max
.
The other expression is just wrong because from 0
to max + 1
doesn't get the range of values you want.
Upvotes: 1