我的Math.random()方法总是返回1?为什么?

时间:2011-06-04 11:55:01

标签: java

随机生成3个弹珠,如果它们相同,不同或者不同,我会比较它们。我的代码如下,我的问题在上面......你可以帮帮我吗?

public static void marb(){
    int a[],b[];
    int num=0;

    a=new int[3];
    b=new int[3];

    a[0]=1;
    a[1]=2;
    a[2]=3;

    **num=(int)Math.random();** //num is always assigned  1

    for(int x=0;x<3;x++)
    {
        num=(int)Math.random();

        b[x]=a[num];

        System.out.println(""+x+". marble:"+b[x]);      

    }

    int x=0;

    if(b[x]==b[x+1] && b[x+1]==b[x+2])
        System.out.println("ALL SAME");
    else if(b[x]!=b[x+1] && b[x]!=b[x+2] && b[x+1]!=b[x+2])
        System.out.println("ALL DIFFERENT");
    else
        System.out.println("One is different");

    }

8 个答案:

答案 0 :(得分:12)

Math.random()会在01之间返回 double 。转换为int将始终截断为0

如果您想要一个随机整数,请使用Random.nextInt(range)方法。

答案 1 :(得分:3)

你确定(int) Math.random()总是返回1吗?如果你告诉我们它总是返回0,我会立即相信。

Math.random()返回double范围内的[0;1)。从doubleint的转换会截断数字,但始终为0。

答案 2 :(得分:2)

Math.random()返回double&gt; = 0和&lt; 1.如果您想要0到x之间的随机数,请使用(int)(Math.random() * x)

答案 3 :(得分:2)

创建随机数生成器的实例

Random rand = new Random(); 

也使发电机播种。

然后致电

int myrandnum = rand.nextInt();

nextInt方法的后续调用将生成不同的数字。

答案 4 :(得分:0)

因为Math.random返回一个介于0和1之间的值(我想是double或float)。将它转换为int它会丢失小数点后面的值,我猜测它会向上舍入为1。

答案 5 :(得分:0)

使用Math.Random()的正确方法是将所需的最大数字加倍,然后关闭括号并将其转换为int(如果需要)

int randomNumber =(int)(Math.random()* max)

它是你所关注的括号的位置。当你有一个你想要的数字范围的上限时,Math.random是一个很好的函数。对于从最小值到最大值的一系列数字,还有另一个堆栈溢出答案可以使它与下限一起工作。

点击此处:Math.random() explained

答案 6 :(得分:0)

  

我的Math.random()方法总是返回1

嗯,这不是真的 - 在这种情况下,它总是返回0,用作 num ,但接下来会发生什么:

b[x]=a[num];
你打电话给[0]三次作为b [0],b [1]和b [2],因为你硬编码了

a[0]=1;

你只会得到那个价值。 在给出的示例中,您可以尝试

num=(int)(Math.random()*3);

因为它只是从0到2生成随机int,甚至使用

num=(int)(Math.random()*a.length);

答案 7 :(得分:-1)

我不是Java程序员,但我对它有所了解 Math.random()将生成0到1之间的随机数。转换为int意味着您需要 1 2
因为你只得到1,所以Math.random()恰好产生0.5到1之间的数字,这就是全部。
我也知道,如果你一次又一次地运行程序,它将产生相同的伪随机值集(除非你重新编译)。