如何使用Math.random()获取范围内的随机数

时间:2016-02-18 17:40:31

标签: java math random

我对Math.random();不太熟悉,我不知道如何处理我想要的条件。我想生成0到52之间的随机整数,这是我设置的。

    public class Tester{
    public static void main(String args[]){
        int size=52;
        while(size>0){
            int rando=(int)Math.random()*size;
            size--;
            System.out.println(rando);
        }
    }
}

我的代码打印出全0,直到满足while循环的条件。我想知道如何生成一个介于0到52之间的随机整数。我知道Math.random();会生成一个double,我认为类型转换存在问题。感谢。

6 个答案:

答案 0 :(得分:7)

您只能投射Math.random()。它的值介于0和1之间(不包括1)。 如果你投了这个,那么无论如何都是零。

投出整个表达式: (int)(Math.random()*size);

顺便说一句: 您的间隔时间仅为0到51(因为排除1。

如果您想要0 ... 52作为间隔,请使用(int)(Math.random()*(size+1));

答案 1 :(得分:3)

强制转换优先于乘法。由于Math.random()会返回范围[0.0..1.0]中的双精度值,因此它将始终转换为0,而将其与任何其他int相乘的结果当然是{ {1}}。您可以在投射前执行乘法 - (0),但实际上使用Random.nextInt(int)会更容易。

答案 2 :(得分:2)

Math.random()返回一个域为[0,1)的伪随机数。

在行中:

int rando=(int)Math.random()*size;

将此值转换为int,然后乘以size。 要解决仅打印零的问题,您需要添加括号。

int rando = (int) (Math.random()*size);

这只会给你域中的数字[0,51] 解决这个问题:

int rando = (int) (Math.random()* (size + 1);

答案 3 :(得分:1)

是否需要使用Math类?

查找此数字的更简单方法是使用Random类

示例:

Random randomNumber = new Random ();
System.out.println(randomNumber.nextInt(53));

另见:

Math.random() versus Random.nextInt(int)

答案 4 :(得分:0)

您可以使用其他代码,例如java.util.Random:

Random r = new Random();
int rando = r.nextInt(53); //inclusive 0 and exclusive 53

如果是Math.random()和你的代码,你必须在乘法后进行强制转换(设置括号如下):

int rando = (int)(Math.random() * size);

在您的代码中,首先获取Math.random()的返回值,然后将其与size-parameter相乘。因为Math.random()在0和1之间返回double,所以转换为int返回0。

答案 5 :(得分:0)

您不能使用Math.random()在数字范围内生成随机整数,如docs中所示。
但您可以使用Random包中的java.util类,并使用方法.nextInt()或更具体地.nextInt(int maximum),其中最大值为 53 ,而不是因为docs状态,该方法是独占的。
如果你想要一个特定范围(例如10到50)之间的数字,你可以构造一个这样的方法:

 private final Random RANDOMISER = new Random();

 private int generateRandomNumber(int from, int to){
  return RANDOMISER.nextInt((to+1)-from)+from;
 }