Java 如何从不同的元素数组中随机选择
我的问题在概念上非常简单: 我有一个由24个布尔值组成的数组,一开始我将其全部设置为false。我可以使用以下代码随机选择此数组的一个元素: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
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);
}