Java – Random Long, Float, Integer and Double

1. Generate an Unbounded Long

Let’s start with generating a Long:

@Test
public void givenUsingPlainJava_whenGeneratingRandomLongUnbounded_thenCorrect() {
    long generatedLong = new Random().nextLong();
}

2. Generate a Long Within a Range

2.1. Random Long With Plain Java

Next – let’s look at creating a random bounded Long – that is, a Long value within a given range or interval:

@Test
public void givenUsingPlainJava_whenGeneratingRandomLongBounded_thenCorrect() {
    long leftLimit = 1L;
    long rightLimit = 10L;
    long generatedLong = leftLimit + (long) (Math.random() * (rightLimit - leftLimit));
}

2.2. Random Long With Apache Commons Math

Let’s take a look at generating the random Long with a cleaner API and Commons Math:

@Test
public void givenUsingApacheCommons_whenGeneratingRandomLongBounded_thenCorrect() {
    long leftLimit = 10L;
    long rightLimit = 100L;
    long generatedLong = new RandomDataGenerator().nextLong(leftLimit, rightLimit);
}

3. Generate an Unbounded Integer

Let’s move right on to generating a random Integer with no bounds:

@Test
public void givenUsingPlainJava_whenGeneratingRandomIntegerUnbounded_thenCorrect() {
    int generatedInteger = new Random().nextInt();
}

As you can see, it’s pretty close to generating a long.

4. Generate an Integer Within a Range

4.1. Random Integer With Plain Java

Next – a random integer within a given range:

@Test
public void givenUsingPlainJava_whenGeneratingRandomIntegerBounded_thenCorrect() {
    int leftLimit = 1;
    int rightLimit = 10;
    int generatedInteger = leftLimit + (int) (new Random().nextFloat() * (rightLimit - leftLimit));
}

4.2. Random Integer With Commons Math

And the same with Common Math:

@Test
public void givenUsingApache_whenGeneratingRandomIntegerBounded_thenCorrect() {
    int leftLimit = 1;
    int rightLimit = 10;
    int generatedInteger = new RandomDataGenerator().nextInt(leftLimit, rightLimit);
}

5. Generate an Unbounded Float

Now, let’s go over generating random floats – first unbounded:

@Test
public void givenUsingPlainJava_whenGeneratingRandomFloatUnbouned_thenCorrect() {
    float generatedFloat = new Random().nextFloat();
}

6. Generate a Float Within a Range

6.1. Random Float With Plain Java

And a bounded random float:

@Test
public void givenUsingPlainJava_whenGeneratingRandomFloatBouned_thenCorrect() {
    float leftLimit = 1F;
    float rightLimit = 10F;
    float generatedFloat = leftLimit + new Random().nextFloat() * (rightLimit - leftLimit);
}

6.2. Random Float With Commons Math

Now – a bounded random float with Commons Math:

@Test
public void givenUsingApache_whenGeneratingRandomFloatBounded_thenCorrect() {
    float leftLimit = 1F;
    float rightLimit = 10F;
    float randomFloat = new RandomDataGenerator().getRandomGenerator().nextFloat();
    float generatedFloat = leftLimit + randomFloat * (rightLimit - leftLimit);
}

7. Generate an Unbounded Double

7.1. Random Unbounded Double With Plain Java

Finally – we’re going to generate random double values – first, with the Java Math API:

@Test
public void givenUsingPlainJava_whenGeneratingRandomDoubleUnbounded_thenCorrect() {
    double generatedDouble = Math.random();
}

7.2. Random Unbounded Double With Commons Math

As well as a random double value with the Apache Commons Math library:

@Test
public void givenUsingApache_whenGeneratingRandomDoubleUnbounded_thenCorrect() {
    double generatedDouble = new RandomDataGenerator().getRandomGenerator().nextDouble();
}

8. Generate a Double Within a Range

8.1. Random Bounded Double With Plain Java

In this example, let’s take a look at a random double generated within an interval – with Java:

@Test
public void givenUsingPlainJava_whenGeneratingRandomDoubleBounded_thenCorrect() {
    double leftLimit = 1D;
    double rightLimit = 10D;
    double generatedDouble = leftLimit + new Random().nextDouble() * (rightLimit - leftLimit);
}

8.2. Random Bounded Double With Commons Math

And lastly – a random double within an interval, using the Apache Commons Math library:

@Test
public void givenUsingApache_whenGeneratingRandomDoubleBounded_thenCorrect() {
    double leftLimit = 1D;
    double rightLimit = 100D;
    double generatedDouble = new RandomDataGenerator().nextUniform(leftLimit, rightLimit);
}

And there you have it – quick and to the point examples of how to generate both unbounded and bounded values for the most common numerical primitives in Java.

9. Conclusion

This tutorial illustrated how we could generate random numbers either bound or unbound, using different techniques and libraries.

As always, the implementation of all of these examples and snippets can be found in the GitHub project. This is a Maven-based project so it should be easy to import and run.

Related posts:

Java Program to Represent Graph Using Adjacency Matrix
An Example of Load Balancing with Zuul and Eureka
Java Program to Test Using DFS Whether a Directed Graph is Weakly Connected or Not
Spring Boot - Web Socket
Programmatic Transaction Management in Spring
SOAP Web service: Upload và Download file sử dụng MTOM trong JAX-WS
Java Program to Describe the Representation of Graph using Incidence List
Runnable vs. Callable in Java
Java Program to implement Bit Set
Guide to the Volatile Keyword in Java
Java Program to Implement LinkedTransferQueue API
Hướng dẫn Java Design Pattern – MVC
Java Program to Implement the One Time Pad Algorithm
Java Program to Find the Shortest Path from Source Vertex to All Other Vertices in Linear Time
Java Program to Implement Adjacency Matrix
Java Program to Generate Randomized Sequence of Given Range of Numbers
The Dining Philosophers Problem in Java
Using a Custom Spring MVC’s Handler Interceptor to Manage Sessions
List Interface trong Java
Java Program to Generate a Sequence of N Characters for a Given Specific Case
Java Program to Find the GCD and LCM of two Numbers
Getting the Size of an Iterable in Java
A Guide to ConcurrentMap
Java Program to Implement the Schonhage-Strassen Algorithm for Multiplication of Two Numbers
Java Program to Compute Cross Product of Two Vectors
@Lookup Annotation in Spring
Spring Cloud Connectors and Heroku
Hướng dẫn Java Design Pattern – Observer
Java Program to Implement ConcurrentSkipListMap API
Java List UnsupportedOperationException
Java Program to Find Nearest Neighbor for Dynamic Data Set
An Introduction to Java.util.Hashtable Class