我的问题在概念上非常简单: 我有一个包含 24 个 boolean 值的数组,最初我已将其全部设置为 false。我可以使用以下代码随机选择该数组的一个元素:
Random r = new Random();
int i1=r.nextInt(24);
现在我时不时地将一些元素的值更改为 true,例如元素号 14 和 22。我现在如何才能仅在其他仍然为 false 的元素之间随机选择而不考虑那些为 true 的元素?真的?预先感谢您的回答。
编辑: 有效的代码是:
Random r = new Random ();
int rand = r.nextInt (24);
while (array[rand]) {
rand = r.nextInt (24);
}
最佳答案
int numberTrue=0; //adjust this in your other code accordingly
Random r = new Random ();
int rand = r.nextInt (24);
// loop until not true found or stop if all items are true
while (array [rand] && numberTrue < 24) {
rand = r.nextInt (24);
count++;
}
我想了一下,在不知道你的代码的情况下,这里有一些建议,可以在它们都为真时避免无限循环(假设条件可能存在):
1. 记录设置的 true 数量(为此调整的示例)
2.按照另一个答案中的建议存储第二个真实索引数组
第一个可能是最简单的实现(在适当的代码点添加 numberTrue++;
和 numberTrue--;
) - 这里只是一个注释如果无法保持此计数,您可以通过在数组上运行初始 for 循环并计算真实元素的数量来实现相同的效果。
第二种方法适合利用另一篇文章的答案之一:
public int generateRandom(int start, int end, ArrayList<Integer> excludeRows) {
Random rand = new Random();
int range = end - start + 1;
int random = rand.nextInt(range) + 1;
while(excludeRows.contains(random)) {
random = rand.nextInt(range) + 1;
}
return random;
}
(我相信他们的代码实际上应该读取 rand.nextInt(range) + start
所以你会运行:
if (trueIndexes.length < 24) {
generateRandom(0, 23, trueIndexes);
}
关于java - 如何从不同的元素数组中随机选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21922695/