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

Java 如何从不同的元素数组中随机选择,java,arrays,random,boolean,Java,Arrays,Random,Boolean,我的问题在概念上非常简单: 我有一个由24个布尔值组成的数组,一开始我将其全部设置为false。我可以使用以下代码随机选择此数组的一个元素: Random r = new Random(); int i1=r.nextInt(24); 现在,我不时地将一些元素的值更改为true,比如元素编号14和22。现在我怎么能随机地选择那些仍然是假的而不考虑真实的人呢?提前谢谢你的回答 编辑: 工作守则是: Random r = new Random (); int rand = r.nextInt (2

我的问题在概念上非常简单: 我有一个由24个布尔值组成的数组,一开始我将其全部设置为false。我可以使用以下代码随机选择此数组的一个元素:

Random r = new Random();
int i1=r.nextInt(24);
现在,我不时地将一些元素的值更改为true,比如元素编号14和22。现在我怎么能随机地选择那些仍然是假的而不考虑真实的人呢?提前谢谢你的回答

编辑: 工作守则是:

Random r = new Random ();
int rand = r.nextInt (24);

while (array[rand]) {
          rand = r.nextInt (24);

        }

例如,可以在ArrayList中跟踪元素值为true的索引。生成随机数时,请检查它是否等于应从随机数生成/选择中排除的已为真的数之一,然后重新生成随机数,直到得到一个仍为假的数组索引

我相信他们的代码应该读rand.nextingrange+start 所以你会跑:

if (trueIndexes.length < 24) {
      generateRandom(0, 23, trueIndexes);
    }

您可以创建包含false的布尔元素列表,并随机选择该列表中的元素。

Pseudocode-当random element==trueyea时,您可以获取random array element,但问题是,当初始数组(我希望随机的数组)将在24个元素中的23个元素中填充true元素时,在这种情况下,我将随机23次,直到我找到那个仍然是假的,对吗?只是想要更有效的东西,但如果我找不到比这更有效的东西,那就是解决方案。所以,如果你想尝试提高效率,那么这个关于从随机数中排除一些数字的问题可能会对你有所帮助:是的,我想我会使用while循环。现在我在查看链接,它似乎很有用,谢谢。我正在查看代码,可能我没有很好地理解,但在我看来,它尝试了24次来生成该数字。。好吧,如果我有1次机会在24生成所需的数字,这并不意味着如果我尝试24次,我一定会生成它…它可能需要5次、20次、30次、100次或更多时间,因为这是有可能的,我也看到了-所以答案调整了。除了最初在阵列上运行另一个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;
}
if (trueIndexes.length < 24) {
      generateRandom(0, 23, trueIndexes);
    }