How do I generate a random integer between min and max in Java?
What method returns a random int between a min and max? Or does no such method exist?
What I'm looking for is something like this:
NAMEOFMETHOD (min, max)
(where min and max are int
s), that returns something like this:
8
(randomly)
If such a method does exist could you please link to the relevant documentation with your answer.
Thanks.
UPDATE
Attempting to implement the full solution and I get the following error message:
class TestR
{
public static void main (String[]arg)
{
Random random = new Random() ;
int randomNumber = random.nextInt(5) + 2;
System.out.println (randomNumber) ;
}
}
I'm still getting the same errors from the compiler:
TestR.java:5: cannot find symbol
symbol : class Random
location: class TestR
Random random = new Random() ;
^
TestR.java:5: cannot find symbol
symbol : class Random
location: class TestR
Random random = new Random() ;
^
TestR.java:6: operator + cannot be applied to Random.nextInt,int
int randomNumber = random.nextInt(5) + 2;
^
TestR.java:6: incompatible types
found : <nulltype>
required: int
int randomNumber = random.nextInt(5) + 2;
^
4 errors
What's going wrong here?
Solution 1:
Construct a Random object at application startup:
Random random = new Random();
Then use Random.nextInt(int):
int randomNumber = random.nextInt(max + 1 - min) + min;
Note that the both lower and upper limits are inclusive.
Solution 2:
You can use Random.nextInt(n). This returns a random int in [0,n). Just using max-min+1 in place of n and adding min to the answer will give a value in the desired range.
Solution 3:
public static int random_int(int Min, int Max)
{
return (int) (Math.random()*(Max-Min))+Min;
}
random_int(5, 9); // For example
Solution 4:
As the solutions above do not consider the possible overflow of doing max-min
when min
is negative, here another solution (similar to the one of kerouac)
public static int getRandom(int min, int max) {
if (min > max) {
throw new IllegalArgumentException("Min " + min + " greater than max " + max);
}
return (int) ( (long) min + Math.random() * ((long)max - min + 1));
}
this works even if you call it with:
getRandom(Integer.MIN_VALUE, Integer.MAX_VALUE)