java - 如何从不同的元素数组中随机选择

标签 java arrays random boolean

我的问题在概念上非常简单: 我有一个包含 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/

相关文章:

java - 如何在redhat linux中将JDK从Oracle升级到Zulu

Java:String.replace(regex, string) 从 XML 中删除内容

c++ - 在 C++ 中向数组添加项的最有效方法

java - 从java中的数组中找出n个缺失元素

java - 接收拔掉耳机时间太长

java - 如何将复选框添加到表中以读取和写入它在 JavaFX 中表示的对象属性

javascript - 解析 JSON 以获取 JavaScript 中对象内数组中的值

c - 在没有循环的情况下生成范围外的随机数

javascript - 从数组中采样随机子集

c# - 在 C# 中随机化数学符号