math.random,只生成0?

时间:2013-10-03 14:49:57

标签: java

以下代码仅生成0; - ;

我做错了什么?

public class RockPaperSci {

  public static void main(String[] args) {
    //Rock 1
    //Paper 2
    //Scissors 3
    int croll =1+(int)Math.random()*3-1;
    System.out.println(croll);
  }
}

编辑,另一张海报提出修复它的东西。 int croll = 1 +(int)(Math.random()* 4 - 1);

谢谢大家!

5 个答案:

答案 0 :(得分:21)

您使用的是Math.random()状态

  

返回带有正号的double值,大于或   等于0.0且小于1.0

您正在将结果转换为int,它返回值的整数部分,即0

然后1 + 0 - 1 = 0

考虑使用Random

Random rand = new Random();
System.out.println(rand.nextInt(3) + 1);

答案 1 :(得分:5)

Math.random()会在范围 - [0.0, 1.0)之间生成双倍值。然后你将结果转换为int

(int)Math.random()   // this will always be `0`

然后乘以3 0。所以,你的表达真的是:

1 + 0 - 1

我想你想把括号括起来:

1 + (int)(Math.random() * 3)

话虽如此,如果要在某个范围内生成整数值,则应该使用Random#nextInt(int)方法。它比使用Math#random()更有效。

你可以像这样使用它:

Random rand = new Random();
int croll = 1 + rand.nextInt(3);

另见:

答案 2 :(得分:1)

在Java中随机生成0或1的最简单方法之一:

   (int) (Math.random()+0.5);
    or
   (int) (Math.random()*2);

答案 3 :(得分:0)

public static double random()

返回带有正号的double值,大于或等于0.0且小于1.0。返回值是伪随机选择的,具有来自该范围的(近似)均匀分布。

 int croll =1+(int)Math.random()*3-1;

例如

 int croll =1+0*-1; 


System.out.println(croll); // will print always 0 

答案 4 :(得分:0)

我们所有的伙伴都向您解释了您获得意外输出的原因。

假设您要生成随机croll

考虑Random解决方案

    Random rand= new Random();
    double croll = 1 + rand.nextInt() * 3 - 1;
    System.out.println(croll);