有人能告诉我如何一次从阵列中选择几个不同的随机数?例如,有一个long int数组.我想从中挑选7个数字.所有数字必须不相同,并按增加顺序对它们进行排序.
Random random = new Random();
int a = mixColor[random.nextInt(mixColor.length)];
int b = mixCoor[random.nextInt(mixCoor.length)];
int c = mixCoor[random.nextInt(mixCoor.length)];
int d = mixCoor[random.nextInt(mixCoor.length)];
int e = mixCoor[random.nextInt(mixCoor.length)];
while(b!=c && c!=d && b!=d) {
b = mixCoor[random.nextInt(mixCoor.length)];
c = mixCoor[random.nextInt(mixCoor.length)];
d = mixCoor[random.nextInt(mixCoor.length)];
}
Run Code Online (Sandbox Code Playgroud)
mixColor[]并且mixCoor[]是长int数组.我可以用这种方式做,但如果我想选更多数字,这将非常复杂.我也需要对它们进行排序.有人得到好主意吗?
Ósc*_*pez 10
尝试使用此方法:
public static int[] pickNRandom(int[] array, int n) {
List<Integer> list = new ArrayList<Integer>(array.length);
for (int i : array)
list.add(i);
Collections.shuffle(list);
int[] answer = new int[n];
for (int i = 0; i < n; i++)
answer[i] = list.get(i);
Arrays.sort(answer);
return answer;
}
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
int[] mixColor = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int[] randomPicks = pickNRandom(mixColor, 5);
Run Code Online (Sandbox Code Playgroud)
该方法保证n随机拾取精确的元素,并将它们返回排序.它还保证不会多次拾取任何元素,并且只要输入数组没有重复,结果数组就不会有重复.
上面的代码工作正常,但是在int和之间来回切换很麻烦,Integer如果输入数组很大(比如> 100.000个元素),它可能会很慢.先测试一下,看看它是否符合您的需求.
| 归档时间: |
|
| 查看次数: |
10980 次 |
| 最近记录: |