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

Java 我的Math.random()方法总是返回1?为什么?,java,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 assign

有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");

    }
publicstaticvoidmarb(){
INTA[],b[];
int num=0;
a=新整数[3];
b=新整数[3];
a[0]=1;
a[1]=2;
a[2]=3;
**num=(int)Math.random();**//num始终被指定为1
对于(int x=0;x
Math.random()
返回一个
double
=0和<1。如果您想要一个介于0和x之间的随机数,请使用
(int)(Math.random()*x)
Math.random()
返回一个介于
0和
1
之间的双精度。转换为
int
将始终截断为
0


如果需要随机整数,请使用
random.nextInt(range)
方法。

创建随机数生成器的实例

Random rand = new Random(); 
它也为发电机播种

然后打电话

int myrandnum = rand.nextInt();
nextInt
方法的后续调用将生成一个不同的数字。

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


Math.random()
[0;1)
范围内返回一个
double
。从
double
int
的转换将截断数字,使其始终为0。

因为Math.random返回一个介于0和1之间的值(我猜是double还是float)。将其转换为int将丢失小数点后的值,我猜转换为1。

我不是Java程序员,但我对它有一些想法。
Math.random()将生成介于0和1之间的随机数。强制转换为int表示您想要12
由于您只得到1,Math.random()恰好生成0.5到1之间的数字,仅此而已。

我还知道,如果你一次又一次地运行这个程序,它将产生相同的伪随机值集(可能你重新编译除外)。

使用Math.Random()的正确方法是将它乘以你想要的最高数字,然后关闭括号并将其转换为int(如果需要)

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

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

单击此处:

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

事实并非如此——在这种情况下,它总是返回0,用作num,但接下来会发生什么:

b[x]=a[num];
您将a[0]作为b[0]、b[1]和b[2]调用三次,因为您已经硬编码了

a[0]=1;
您将只获得该值。 在给定的示例中,您可以尝试

num=(int)(Math.random()*3);
因为它只会生成从0到2的随机整数,甚至使用

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

不,您应该使用自己的随机数生成器,然后使用
rnd.nextInt(x)
。否则,并非所有结果都是平均分布的。-1:为什么在0.0和1.0之间铸造一个数字会得到1或2作为输出?