Java 我的Math.random()方法总是返回1?为什么?
有3个随机产生的弹珠,我会比较他们,如果他们是相同的,不同的或一个是不同的。我的代码在下面,我的问题在上面。。。你能帮我吗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
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;xMath.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表示您想要1或2
由于您只得到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作为输出?