好
我有问题,我想生成0到1之间的64个数字(表示0或1)
我目前的职能是:
public static int randNr(int max) {
Random r = new Random();
int o = r.nextInt(max);
return o;
}
但它总是返回0。 有没有办法让它产生一个1?
编辑:
该函数位于与调用它时不同的java文件中!
答案 0 :(得分:2)
两个问题:
1)nextInt(max);
生成一个从0开始的数字,但不包括 max
。我的猜测是你将{1}传递给max
。通过2,一切都会很好。
2)每次创建新的生成器对象都会破坏生成器的统计属性。您应该创建一个Random
实例,并且(i)传入函数或(ii)将实例存储为成员变量。
答案 1 :(得分:1)
此功能正常。你可能用错误的参数来调用它。它应该是:
randNr(2)
为什么?因为它使用的是Random#nextInt(max)
方法,它会返回[0, max-1]
范围内的随机整数(包括0
和max-1
)。
注意:每次调用此函数时,建议不要创建新的Random
对象。一种解决方案是将Random
对象声明为该类的static
成员:
public class Test
{
private static Random r = new Random();
// ...
}
另一种解决方案是使用static
方法Math.random()
1 :
int o = (int) Math.round(Math.random());
1:有人可以确认这种方法是否比OP更快?