## Generating random integers in a specific range

Question!

I am trying to generate a random `int`value with Java, but in a specific range.

For example:

My range is 5-10, meaning that 5 is the smallest possible value and 10 is the biggest. Any other number in between these numbers is possible to be a value, too.

In Java, there is a method `random()` in the `Math` class, which returns a `double` value between 0.0 and 1.0. In the class `Random` there is the method `nextInt(int n)`, which returns a random `int` value in the range of 0 (inclusive) and n (exclusive). I couldn't find a method, which returns a random integer value between two numbers.

I have tried the following things, but I still have problems: (minimum and maximum are the smallest and biggest numbers).

Solution 1:

``````randomNum = minimum + (int)(Math.random() * maximum);
``````

Problem:

`randomNum` can be bigger than `maximum`.

Solution 2:

``````Random rn = new Random();
int n = maximum - minimum + 1;
int i = rn.nextInt() % n;
randomNum =  minimum + i;
``````

Problem:

`randomNum` can be smaller than `minimum`.

How do I solve these problems?

I have tried also browsing through the archive and found:

But I couldn't solve the problem.

By : user42155

This will generate Random numbers list with range (Min - Max) with no duplicate.

``````generateRandomListNoDuplicate(1000, 8000, 500);
``````

``````private void generateRandomListNoDuplicate(int min, int max, int totalNoRequired) {
Random rng = new Random();
while (generatedList.size() < totalNoRequired) {
Integer radnomInt = rng.nextInt(max - min + 1) + min;
}
}
``````

Generate a random number for the difference of min and max by using the nextint(n) method and then add min number to the result:

``````Random rn = new Random();
int result = rn.nextInt(max - min + 1) + min;
System.out.println(result);
``````

You can do something like this:

``````import java.awt.*;
import java.io.*;
import java.util.*;
import java.math.*;

public class Test {

public static void main(String[] args) {
int first, second;

Scanner myScanner = new Scanner(System.in);

System.out.println("Enter first integer: ");
int numOne;
numOne = myScanner.nextInt();
System.out.println("You have keyed in " + numOne);

System.out.println("Enter second integer: ");
int numTwo;
numTwo = myScanner.nextInt();
System.out.println("You have keyed in " + numTwo);

Random generator = new Random();
int num = (int)(Math.random()*numTwo);
System.out.println("Random number: " + ((num>numOne)?num:numOne+num));
}
}
``````
By : thangaraj