有人能告诉我如何一次从阵列中选择几个不同的随机数? 例如,有一个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)];
}
mixColor[]
和mixCoor[]
是长整数数组。我可以用这种方式做,但如果我想选更多数字,这将非常复杂。我也需要对它们进行排序。有人得到好主意吗?
答案 0 :(得分: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;
}
像这样使用:
int[] mixColor = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int[] randomPicks = pickNRandom(mixColor, 5);
该方法保证随机选取正好n
个元素,并且它们将被返回排序。它还保证不会多次拾取任何元素,并且只要输入数组没有重复,结果数组就不会有重复。
上面的代码工作正常,但是在int
和Integer
之间来回切换很麻烦,如果输入数组很大(例如,> 100.000个元素),它可能会很慢。首先进行测试,看看它是否符合您的需求。
答案 1 :(得分:1)
Random gen = new Random();
int max = mixCoor.length; // Maximum Random value to generate
ArrayList<Integer> picked = new ArrayList<Integer>(); // List of picked numbers
for(int i = 0; i < numToBePicked; i++) {
int index = gen.nextInt(max);
if(!picked.contains(mixCoor[index]) // If the number isn't already picked
picked.add(mixCoor[index]); // Add it to the "picked" list
}
Collections.sort(picked); // Sort the picked numbers into ascending order
答案 2 :(得分:0)
您可以使用现有的Java API执行所需的一切:
public static Integer[] pickRandom(Integer[] array, int number) {
List<Integer> list = new ArrayList<Integer>(Arrays.asList(array));
Collections.shuffle(list);
list = list.subList(0, number);
Collections.sort(list);
return list.toArray(new Integer[number]);
}
注意:您需要使用Integer[]
而不是int[]
进行调用,因此您必须自行转换。此外,虽然在代码大小和复杂性方面“高效”,但这在性能方面并不是那么有效(尽管它可能仍然可用)。如果你有List<Integer>
开始,这段代码会更简单。
答案 3 :(得分:-1)
Random random new Random();
for (int i=0;i<7;i++){
int a = mixColor[random.nextInt()%mixColor.length];
}
当然,您可以使用随机种子获得更多随机数