I know there are another questions about random in a range but none of their answers accomplishes what I am trying to do. Actually they have the same error I have. I wrote this simple function to generate random with range.
Random m_random = new Random();
...
public int RandomWithRange(int min, int max) {
return m_random.nextInt(max - min + 1) + min;
}
If range is bigger than Integer.MAX_VALUE, it throws an IllegalArgumentException: n must be positive. I know it overflows and turn to a negative number. My question is how to handle that?
Example ranges;
Note: min and max must be inclusive.
You cannot use int in this case. You need to go with BigInteger. The following constructor does what you want (need some tweaking for your needs of course):
BigInteger(int numBits, Random rnd)
Constructs a randomly generated BigInteger, uniformly distributed over the range 0 to (2numBits - 1), inclusive.
The problem you have is that (max - min)
overflows and gives you a negative value.
You can use a long
instead.
public int randomWithRange(int min, int max) {
return (int) ((m_random.nextLong() & Long.MAX_VALUE) % (1L + max - min)) + min;
}
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