This is a pretty simple Java (though probably applicable to all programming) question:
Math.random()
returns a number between zero and one.
If I want to return an integer between zero and hundred, I would do:
(int) Math.floor(Math.random() * 101)
Between one and hundred, I would do:
(int) Math.ceil(Math.random() * 100)
But what if I wanted to get a number between three and five? Will it be like following statement:
(int) Math.random() * 5 + 3
I know about nextInt()
in java.lang.util.Random
. But I want to learn how to do this with Math.random()
.
If you want to generate a number from 0 to 100, then your code would look like this:
(int)(Math.random() * 101);
To generate a number from 10 to 20 :
(int)(Math.random() * 11 + 10);
In the general case:
(int)(Math.random() * ((upperbound - lowerbound) + 1) + lowerbound);
(where lowerbound
is inclusive and upperbound
exclusive).
The inclusion or exclusion of upperbound
depends on your choice.
Let's say range = (upperbound - lowerbound) + 1
then upperbound
is inclusive, but if range = (upperbound - lowerbound)
then upperbound
is exclusive.
Example: If I want an integer between 3-5, then if range is (5-3)+1 then 5 is inclusive, but if range is just (5-3) then 5 is exclusive.
To generate a number between 10 to 20 inclusive, you can use java.util.Random
int myNumber = new Random().nextInt(11) + 10
Here's a method which receives boundaries and returns a random integer. It is slightly more advanced (completely universal): boundaries can be both positive and negative, and minimum/maximum boundaries can come in any order.
int myRand(int i_from, int i_to) {
return (int)(Math.random() * (Math.abs(i_from - i_to) + 1)) + Math.min(i_from, i_to);
}
In general, it finds the absolute distance between the borders, gets relevant random value, and then shifts the answer based on the bottom border.
Source: Stackoverflow.com