【发布时间】:2012-03-21 08:27:34
【问题描述】:
我需要从一个更大的 int 数组生成一个随机数组,不重复且在一个数字范围内。
例如 我有一个 1-200 int 的数组 a[] ,我需要的是来自所有 200 个 int 但大小为 15 的随机数数组。我该如何实现呢?
【问题讨论】:
我需要从一个更大的 int 数组生成一个随机数组,不重复且在一个数字范围内。
例如 我有一个 1-200 int 的数组 a[] ,我需要的是来自所有 200 个 int 但大小为 15 的随机数数组。我该如何实现呢?
【问题讨论】:
Fisher-Yates shuffle。特别是,只打乱前 15 个元素并选择它们。
【讨论】:
In particular, shuffle just the first 15 elements and select them. - 抱歉,我并没有真正理解这部分内容。能详细点吗?
Random rnd = new Random();
int[] a = new int[200];
for (int i = 0; i < a.length; i++)
a[i] = i;
int[] r = new int[15];
for (int i = 0; i < r.length; i++) {
int j = rnd.nextInt(a.length - i);
r[i] = a[j];
a[j] = a[a.length - i - 1];
}
应该这样做。从a中随机抓取一些东西。抓住它后,将其替换为 a 的“最后一个”值。 “last”值很容易从 a.length 和 i 导出。
【讨论】: