Class Random仅生成0

时间:2014-06-02 07:06:05

标签: java class random

我有问题,我想生成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文件中!

2 个答案:

答案 0 :(得分:2)

两个问题:

1)nextInt(max);生成一个从0开始的数字,但不包括 max。我的猜测是你将{1}传递给max。通过2,一切都会很好。

2)每次创建新的生成器对象都会破坏生成器的统计属性。您应该创建一个Random实例,并且(i)传入函数或(ii)将实例存储为成员变量。

答案 1 :(得分:1)

此功能正常。你可能用错误的参数来调用它。它应该是:

randNr(2)

为什么?因为它使用的是Random#nextInt(max)方法,它会返回[0, max-1]范围内的随机整数(包括0max-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更快?