gpt4 book ai didi

java - 尝试用随机值填充 boolean 矩阵

转载 作者:行者123 更新时间:2023-11-29 03:27:50 25 4
gpt4 key购买 nike

while(MatriceLib.compteTrue(champsMine)!= nbMines)
{
int i = (int) Math.floor((Math.random()*(longueur-1)));
int j = (int)Math.floor((Math.random()*(largeur-1)));
champsMine[i][j] = true;
}

champsMine 是 boolean 矩阵, boolean 值位于随机位置。compteTrue 返回矩阵中 true 数的 int 值。nbMines 是矩阵必须具有的真数。

问题是用值填充矩阵需要花费大量时间。

有没有办法让它更有效率?

最佳答案

您没有发布很多代码,但看起来您每次循环都在计算数组中 true 元素的数量。这是缓慢的部分。相反,请考虑在进行时保持计数,例如:

int count = 0; // or whatever the current count is, if there are already true elements
while (count < nbMines) {
int i = ...;
int j = ...;
if (!champsMine[i][j]) {
++ count;
champsMine[i][j] = true;
}
}

当然,随着剩余的 false 槽的数量减少(增加已设置随机位置的机会),这会减慢速度。另一种方法是创建所有 (i,j) 组合的数组/列表(一个用于网格中的每个单元格),随机打乱该列表,然后取第一个 nbMines 坐标,并将这些值设置为 true。这设置起来稍微复杂一些,但仍然很简单,而且速度会非常快(填充列表然后洗牌保证你不会选择已经设置的坐标)。对于 nbMines 大于网格单元数的可能性,它自然也是安全的。

关于java - 尝试用随机值填充 boolean 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20054249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com