java - 使用 random.nextBoolean() - 随机生成器

标签 java

在下面的示例中,while 循环模拟机械师看到 10 个使用过的引擎。每个引擎都有 50% 的机会工作或不工作。我的变量计数器记录工作引擎的数量,并在程序结束时将其打印出来。

我的问题是这是使用 rgen.nextBoolean() 的正确且最好的方法吗?将 rgen.nextBoolean 放入方法中然后从 while 循环内部调用该方法是否更好?另外,我有点困惑 if(rgen.nextBoolean()) 如何知道它正在评估 n 如果您没有在 if 条件中明确告诉 rgen.nextBoolean() 您将 n 作为值给出?

import acm.program.*;
import acm.util.*;

public class WorkingEngines extends ConsoleProgram{
public void run(){


int n = 0;
int counter = 0;

    while (n < 10) {
     if (rgen.nextBoolean()){
       counter++;
          }  
      n++;
      }
 println("out of ten random engines you have" + counter + " working properly");
 }




private RandomGenerator rgen = RandomGenerator.getInstance();
}

最佳答案

Also, I'm a little confused how if(rgen.nextBoolean()) knows it's evaluating n if you don't specifically tell the rgen.nextBoolean() in the if condition that you're giving it n as a value?

事实并非如此。它不可能知道。那么,到底发生了什么?

随机数生成器有一个内部状态。内部状态会一直保留,直到您向其请求新的随机数为止,此时状态会伪随机更改,并返回与新状态相对应的新随机值。因此,如果您生成具有三个起始状态的三个随机数生成器并要求它们提供 boolean 值,它们将返回不同的 boolean 值序列,但如果您以相同的起始状态生成它们(例如,在以下情况下将 0 的种子传递给所有生成器)构造)它们将永远产生相同的序列。

其他想法:

当用 for 循环更好地表达时,为什么要使用 while n < 10,++n 循环?

调用 nextBoolean 和在方法中调用 nextBoolean 之间有什么区别,除非您计划使该方法子类化并且可重写,例如?

关于java - 使用 random.nextBoolean() - 随机生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17309812/

相关文章:

java - 更新 Swixml2 中的绑定(bind)

java - 比较两个 throwable 的正确方法是什么?

java - 添加/删除断点时 Eclipse 总是挂起几秒钟

java - 线程变得困惑

java - 重写clone()方法时,为什么需要将其声明为public?

java - 如何从默认的中央 Maven 和其他公共(public)存储库下载 Maven jar 及其依赖项?

java - Google Maps SDK for Android : Smoothly animating the camera to a new location, 沿途渲染所有图 block

java - 比较谷歌驱动器上的文件和本地计算机上存储的文件的上次修改时间

java - Eclipse JUnit - 在 Eclipse 窗口中看到 "initializationError"的可能原因

java - 如何访问数组列表中对象的一部分?