Win a copy of Programmer's Guide to Java SE 8 Oracle Certified Associate (OCA) this week in the OCAJP forum!

# Generate Random Number within a range including negatives?

Andrew Robinson
Greenhorn
Posts: 15
I have no idea how to generate a random number within a given range. The range can include negative numbers. Can anyone help?

T Dahl
Ranch Hand
Posts: 35
Why not subtract a fixed number from a random number? If you need more or less range, multiply by some suitable number.

marc weber
Sheriff
Posts: 11343
Math.random() is a good place to start. If that doesn't suit your needs, then java.util.Random should be your next stop.

Math.random() generates a double between 0 and 1 (including 0, but not 1). As T Dahl suggested, you can multiply this value by some factor to increase your range, then shift that range by adding or subtracting.

Rob Spoor
Sheriff
Posts: 20608
63
In general, for any function f that returns a value between a and b, to get a value between c and d apply the following calculation: (f(x) - a) / (b - a) * (d - c) + c.

The subtraction of a gives you a value between 0 and (b - a).
The dividing by (b - a) gives you a value between 0 and 1 (provided b != a).
The multiplication gives you a value between 0 and (d - c).
The addition of c gives you a value between c and d.

In this case, a == 0 and b == 1, so you are left with Math.random() * (d - c) + c.