首先:我主要是自学成才,所以如果我不知道正确的术语或犯一些菜鸟错误,请原谅我。
所以,我正在用种子创建一个随机变量。当您从变量中获取“下一个”时,它会从该种子中获取下一个值。有什么方法可以将您的位置记录在随机变量中吗?例如,理想情况下,以下代码将输出两个相同的字符串:
//My attempt to save my location in a Random:
r = new Random(5);
for (int i = 0; i < 10; i++) {
System.out.print(r.nextInt(2));
if (i == 9) {
System.out.print(" ");
}
}
//====================================
System.out.println("\n-------------");
r = new Random(5);
for (int i = 0; i < 5; i++) {
System.out.print(r.nextInt(2));
}
r = new Random(r.nextLong());
System.out.print(" ");
for (int i = 0; i < 5; i++) {
System.out.print(r.nextInt(2));
}
而是返回:
1001010100 1100110011
-------------
1001010100 0010010111
-------------
是否有某种方法可以“记住”我的位置,以便我可以创建一个新的随机变量,该变量将在前一个变量停止的地方继续?最好,我不想序列化变量 - 这不会是世界末日,但我想知道是否还有其他方法。
最佳答案
您无法使用一个种子生成 n
个数字,然后使用其他一些种子从上一个系列结束的位置开始。
您可以再次使用相同的种子,并使用流并跳过您之前生成的数字。
第一个列表的最后 5 个值应等于下一个列表的前 5 个值。
Random r = new Random(23);
r.ints(10,1,100).forEach(a->System.out.print(a + " " ));
System.out.println();
r = new Random(23);
r.ints(10,1,100).skip(5).forEach(a->System.out.print(a + " "));
您还可以继续使用相同的Random
实例,因为它们不会过期。
r = new Random(23);
r.ints(5,1,100).forEach(a -> System.out.print(a + " "));
r.ints(5,1,100).forEach(a -> System.out.print(a + " "));
当然,如果您想长期保留同一个对象,或者需要生成并跟踪大量随机值,那么序列化可能是最好的解决方案。
关于java - 还记得随机种子中的位置(?)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59793528/