public class Main2 {
public static void main(String[] args) {
int[] nums = { 1 , 2 , 3 , 4 , 5 };
System.out.println( Arrays.toString( ran(nums , 2) ));
System.out.println( Arrays.toString( ran(nums , 2) ));
System.out.println( Arrays.toString( ran(nums , 2) ));
}
public static int[] ran(int[] nums, long seed) {
int[] ran = nums.clone();
Random random = new Random( seed );
for ( int i = 0, k = ran.length * 2 ; i < k ; i++ ) {
int a = (random.nextInt() & Integer.MAX_VALUE) % ran.length;
int b = (random.nextInt() & Integer.MAX_VALUE) % ran.length;
swap( ran , a , b );
}
return ran;
}
private static void swap(int[] nums, int a, int b) {
int t = nums[a];
nums[a] = nums[b];
nums[b] = t;
}
}
public static void main(String[] args) {
int[] nums = { 1 , 2 , 3 , 4 , 5 };
System.out.println( Arrays.toString( ran(nums , 2) ));
System.out.println( Arrays.toString( ran(nums , 2) ));
System.out.println( Arrays.toString( ran(nums , 2) ));
}
public static int[] ran(int[] nums, long seed) {
int[] ran = nums.clone();
Random random = new Random( seed );
for ( int i = 0, k = ran.length * 2 ; i < k ; i++ ) {
int a = (random.nextInt() & Integer.MAX_VALUE) % ran.length;
int b = (random.nextInt() & Integer.MAX_VALUE) % ran.length;
swap( ran , a , b );
}
return ran;
}
private static void swap(int[] nums, int a, int b) {
int t = nums[a];
nums[a] = nums[b];
nums[b] = t;
}
}
关键在Random random = new Random( seed );这句,相同种子第一个 nextInt 是一样的,后面的 nextInt 在 Random 中采用线性同余算法生成的,即 java.util.Random,seed一样,next结果一样,所以:
运行结果:
[3, 2, 1, 5, 4]
[3, 2, 1, 5, 4]
[3, 2, 1, 5, 4]
本文探讨了Java中使用特定种子生成随机数的行为,并通过示例展示了如何利用相同的种子重复生成一致的随机序列。这对于调试和测试场景尤其有用。
1418

被折叠的 条评论
为什么被折叠?



