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

标签 java loops random matrix boolean

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/

相关文章:

java - Onclick 中的 NullPointer 异常

java - 在 java/JSP 中迭代 Map

java - hql - 获取意外 token 的错误

java - SpringBeanAutowiringSupport不在jUnit测试中注入(inject)bean

javascript - 如何延迟循环?或者如何让循环变慢?

javascript - 如何更正我的代码以返回所有匹配的城市单独的 div?

python - 从列表中提取满足条件的随机值? Python

mysql - 在 mysql 语句中使用 For 循环在 vb.net 中变慢

java - 关于java作业的帮助

java - 随机生成整数,不重复,无数组