如何使用此发行版在Java中生成随机布尔值?

时间:2013-03-10 04:32:08

标签: java random boolean

我需要生成一些随机boolean值。

但是,我需要确保在100次通话中获得10 true次。此外,我需要true值非常均匀地分布(例如,第二个true将在9 false之后出现,第三个将在7之后出现false {1}}等等。我尝试使用java.util.Random nextBoolean()方法实现此功能,但似乎true值在开始时过度拥挤。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:4)

这是一些实现stratified sampling技术的代码:

boolean[] get10in100() {
    boolean[] result = new boolean[100];
    Random rand = new Random();
    for (int i = 0; i < 10; ++i) {
        result[10 * i + rand.nextInt(10)] = true;
    }
    return result;
}

答案 1 :(得分:0)

取决于你想如何定义随机性...这是一种可能性:

boolean[] ranbool = new boolean[100];
Random rng = new Random();
for (int i = 0 ; i < 10 ; i++)
    ranbool[rng.nextInt(100)] = true;

//以下是多余的

for (int i = 0 ; i < 100 ; i++)
    System.out.print ((ranbool[i]) ? "X" : "O");
System.out.println();

答案 2 :(得分:0)

如果你想要真正随机地克服N,你可以创建一个K trues和N-K trues的数组,并使用Collections上的shuffle方法随机化。

List<Boolean> values = new ArrayList<Boolean>();
for (int i = 0; i < 10; i++) {
  values.add(true);
}
for (int i = 0; i < 90; i++) {
  values.add(false);
}

Collections.shuffle(values);

如果你希望它每10个字面间隔一次,请使用Ted的答案,相反,虽然目前还不清楚你是否真的想从你的描述中找到它。

答案 3 :(得分:0)

少量增强的通用@ted-hopp解决方案,用于创建布尔的分布式prim数组

也许对某人有帮助:

public static boolean[] getRandomBooleanArray(int itemsCount, int truePercentage) {
    Random rand = new Random();
    boolean[] result = new boolean[itemsCount];
    int boolCount = (int) (itemsCount * truePercentage * 0.01); // true items count
    int step = (itemsCount + boolCount - 1) / boolCount; // calculate step
    for (int i = 0; i < boolCount; ++i) {
        int noise = rand.nextInt(step); // calculate noise
        int index = step * i + noise; // initial index
        int realIndex = index < itemsCount ? index : itemsCount-1; // ensure min index
        result[realIndex] = true;
    }
    return result;
}