有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Random在2个周期内,我需要重新初始化吗?

我有这个密码:

Random r = new Random();
while (mStack[step].hasNext()) {
int rand = r.nextInt(length);
 for (int i = rand; i < length+rand; i++) {
  //use of i and rand                 
 }
}

所有这些都在一个递归调用中实现

这会为每个while迭代播种一个新的随机变量,对每个递归调用都不同吗

或者我必须使用

while (mStack[step].hasNext()) {
 Random r = new Random();
int rand = r.nextInt(length);
 for (int i = rand; i < length+rand; i++) {
  //use of i and rand                 
 }
}

请给出建议


共 (2) 个答案

  1. # 1 楼答案

    不断地重新播种是没有好处的。创建Random的单个实例,并将其作为参数在堆栈上传递给递归方法

    Java 6中的no arg Random构造函数使用实例计数器和当前System.nanoTime()值之和作为种子。当然,nextInt()不会执行重新播种

  2. # 2 楼答案

    你需要使用下面的例子。顶部的示例将使用包含方法的每次调用重新初始化。第二个将对堆栈中的每个项执行此操作,这意味着循环中的每个迭代