【发布时间】:2014-06-01 09:15:07
【问题描述】:
例如下面的代码。它有一个随机类。然而,它总是在任何地方产生相同的输出。在这种情况下,哪个项目是种子?
来源:link
import java.util.Random;
public class RandomTest {
public static void main(String[] s) {
Random rnd1 = new Random(42);
Random rnd2 = new Random(42);
System.out.println(rnd1.nextInt(100)+" - "+rnd2.nextInt(100));
System.out.println(rnd1.nextInt()+" - "+rnd2.nextInt());
System.out.println(rnd1.nextDouble()+" - "+rnd2.nextDouble());
System.out.println(rnd1.nextLong()+" - "+rnd2.nextLong());
}
}
【问题讨论】:
-
答案永远是42。下次先试试看javadoc吧。
-
@Klas Lindbäck 如果我能理解 javadoc,我不会在这里问。
-
宇宙和一切的分析者都是42。这是个笑话。 random 函数使用种子创建令牌,如密码加密中的盐,但在那里添加非存储密钥。在这里,您可以使用相同的种子(id)来获得结果。
-
@WASasquatch 是否意味着在这种情况下每个密码都使用相同的盐值?
-
通常他们使用随机盐,因为意图不是种子。它就像相反。在这里,我们打算重新使用种子,在那里他们只是加盐、调味,使其更难解密。所以他们会根据执行的第二个和日期使用微时间,即:
.currentTimeMillis