随机生成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");
}
答案 0 :(得分:12)
Math.random()
会在0
和1
之间返回 double 。转换为int
将始终截断为0
。
如果您想要一个随机整数,请使用Random.nextInt(range)
方法。
答案 1 :(得分:3)
你确定(int) Math.random()
总是返回1吗?如果你告诉我们它总是返回0,我会立即相信。
Math.random()
返回double
范围内的[0;1)
。从double
到int
的转换会截断数字,但始终为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是一个很好的函数。对于从最小值到最大值的一系列数字,还有另一个堆栈溢出答案可以使它与下限一起工作。
答案 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之间的数字,这就是全部。
我也知道,如果你一次又一次地运行程序,它将产生相同的伪随机值集(除非你重新编译)。