【问题标题】:How to get a random number in a range using Math.random() [duplicate]如何使用 Math.random() 获取范围内的随机数 [重复]
【发布时间】:2016-05-31 00:59:25
【问题描述】:

我对@9​​87654321@ 不太熟悉,不知道自己想要什么条件。到目前为止,我想生成一个介于 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(); 会生成一个双精度数,我认为类型转换存在问题。谢谢。

【问题讨论】:

    标签: java math random


    【解决方案1】:

    你只施放 Math.random()。它是一个介于 0 和 1 之间的值(不包括 1)。 如果你施放它,无论如何它都是零。

    转换整个表达式: (int)(Math.random()*size);

    顺便说一句: 您的区间仅从 0 到 51(因为不包括 1。

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

    【讨论】:

    • 有什么办法可以防止 Math.random();从重复它已经产生的东西?
    • 否,但您可以将值保存在 Set 中并测试该值是否已在 set 中。
    【解决方案2】:

    强制转换优先于乘法。由于Math.random() 在 [0.0..1.0) 范围内返回一个双精度值,因此它将始终转换为 0,并且将其乘以任何其他 int 的结果当然是 0。您可以在转换之前执行乘法 - ((int)(Math.random()*size)),但实际上使用 Random.nextInt(int) 会更容易。

    【讨论】:

      【解决方案3】:

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

      行内:

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

      这个值被转换为一个整数,然后乘以大小。 要解决仅打印零的问题,您需要添加括号。

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

      这只会为您提供域 [0, 51) 中的数字 要解决这个问题:

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

      【讨论】:

        【解决方案4】:

        需要使用 Math 类吗?

        找到这个数字的更简单方法是使用 Random 类

        例子:

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

        另请参阅:

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

        【讨论】:

          【解决方案5】:

          您可以使用其他代码,例如 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() 的返回值首先被强制转换,然后与大小参数相乘。因为 Math.random() 返回介于 0 和 1 之间的 double,所以强制转换为 int 返回 0。

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-01-04
              • 1970-01-01
              • 1970-01-01
              • 2018-05-15
              • 2021-07-24
              • 1970-01-01
              • 2020-10-23
              • 2012-07-29
              相关资源
              最近更新 更多