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
}
}
请给出建议
# 1 楼答案
不断地重新播种是没有好处的。创建
Random
的单个实例,并将其作为参数在堆栈上传递给递归方法Java 6中的no arg
Random
构造函数使用实例计数器和当前System.nanoTime()
值之和作为种子。当然,nextInt()
不会执行重新播种# 2 楼答案
你需要使用下面的例子。顶部的示例将使用包含方法的每次调用重新初始化。第二个将对堆栈中的每个项执行此操作,这意味着循环中的每个迭代