Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java math.random,只生成一个0?_Java - Fatal编程技术网

Java math.random,只生成一个0?

Java math.random,只生成一个0?,java,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)

以下代码仅生成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)

谢谢大家

您正在使用哪些状态

返回一个带正号、大于或的
双精度
值
等于
0.0
且小于
1.0

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

然后
1+0-1=0

考虑使用
java.util.Random

Random rand = new Random();
System.out.println(rand.nextInt(3) + 1);
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)

话虽如此,若要在某个范围内生成整数值,就应该真正使用方法。它比使用
Math\random()
更有效

您可以这样使用它:

Random rand = new Random();
int croll = 1 + rand.nextInt(3);
另请参见:

返回一个带正号的双精度值,大于或等于0.0,小于1.0。返回值是从该范围内以(近似)均匀分布伪随机选择的

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


我们所有的伙伴都向你解释了你获得意外产出的原因

假设您想要生成一个随机的
croll

考虑
Random
以获得解决方案

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

Math.random返回一个介于0.0和1.0之间的双精度数,因此它的整数值始终为O。请看强制转换比其他运算具有更高的优先级。我想你的意思是1+(int)(Math.random()*3)@SpiderPig取决于具体情况。确实不清楚OP想要生成什么数字。但我会让他自己决定。谢谢:)@sᴜʀᴇsʜᴀᴛᴛᴀ 我只是用了这样的括号。在这种情况下,输出并不总是0。@sᴜʀᴇsʜᴀᴛᴛᴀ 无问题:)
 int croll =1+0*-1; 


System.out.println(croll); // will print always 0 
    Random rand= new Random();
    double croll = 1 + rand.nextInt() * 3 - 1;
    System.out.println(croll);