【问题标题】:Java random numberJava随机数
【发布时间】:2016-04-15 18:19:19
【问题描述】:

这里的初学者问题: 我尝试使用此代码创建一个随机数

int rand = (int) Math.random()*10;

但是,我在打印到屏幕时一直收到 0 作为答案

只有在这样放括号之后

int rand = (int)(Math.random()*10);

数字显示是否正确。 谁能解释我错过的逻辑原因?

【问题讨论】:

    标签: java random numbers generator


    【解决方案1】:

    当你写int rand = (int) Math.random()*10时,你实际上是在写:

    int rand = ((int) Math.random()) * 10;
    

    因此,您得到 0,因为随机数介于 0 和 1 之间,并将其转换为 int 使其等于 0。

    【讨论】:

      【解决方案2】:

      代码

      int rand = (int) Math.random()*10;
      

      等价于

      int rand = ((int) Math.random()) * 10; 
      

      所以Math.random() 的值被转换为int。因为该值介于 0 和 1 之间(不包括 1),所以它被转换始终为零

      所以

      (int) Math.random()*10 -->  ((int) Math.random()) * 10 --> 0 * 10 --> 0
      

      【讨论】:

        【解决方案3】:

        Math.random() 返回一个介于 0 和 1 之间的 double 数字,这意味着 (int)Math.random() 将始终为 0(因为 Math.random() < 1)。为了在转换为 int 之前执行乘法,您必须像以前一样使用括号。

        【讨论】:

          【解决方案4】:

          其他答案已经解释了你的代码的问题,所以我不再在这里讨论这个话题了。

          这只是一个关于随机数生成的说明:
          在 java 中生成随机数的推荐方法不是 Math.random() ,而是通过 java.util.Random 类 (http://docs.oracle.com/javase/7/docs/api/java/util/Random.html)。

          要生成如上例中的随机数,您可以使用以下代码:

          Random rnd = new Random();
          int i = rnd.nextInt(10);
          

          ,这将产生与您的代码相同的结果。

          【讨论】:

            【解决方案5】:
            int rand = (int) Math.random()*10;
            

            等价于

            int rand = ((int) Math.random())*10;
            

            考虑到 Math.random() 从 0

            int rand = ((int) Math.random()); -- ALWAYS --> ZERO
            
            0*N ---- ALWAYS ---> ZERO
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-05-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多