Random number between two values

This is a small utility class that allows us to obtain a random number between two values that are uniformly distributed in the range of ‘low’ to ‘high’. This works for floats, doubles and integers.

The inner working of this class are straight forward, our uniform(int, int) method uses the nextInt(int) method of Random class which already allows us to pass the upper bound. Float and Double work by obtaining a value in range [0.0, 1.0] and then scaling it accordingly between our ‘low’ and ‘high’

As this is meant for use in multithreaded environment I am using java.util.concurrent.ThreadLocalRandom rather than java.util.Random for performance reasons.

import java.util.concurrent.ThreadLocalRandom;
 
import java.util.concurrent.ThreadLocalRandom;
 
public class RandomUtil
{
    public static int uniform(final int low, final int high)
    {
        final ThreadLocalRandom rand = ThreadLocalRandom.current();
        return rand.nextInt(high - low) + low;
    }
 
    public static float uniform(final float low, final float high)
    {
        final ThreadLocalRandom rand = ThreadLocalRandom.current();
        return rand.nextFloat() * (high - low) + low;
    }
 
    public static double uniform(final double low, final double high)
    {
        final ThreadLocalRandom rand = ThreadLocalRandom.current();
        return rand.nextDouble() * (high - low) + low;
    }
 
    public static double nextDouble()
    {
        final ThreadLocalRandom rand = ThreadLocalRandom.current();
        return rand.nextDouble();
    }
 
    public static boolean nextBoolean()
    {
        final ThreadLocalRandom rand = ThreadLocalRandom.current();
        return rand.nextBoolean();
    }
}

Leave a Comment

Your email address will not be published. Required fields are marked *