java从数组a[]={1,2,3,4,5,6,7,8,9,10}中随机抽取5个数且不重复
问题描述:
java从数组a[]={1,2,3,4,5,6,7,8,9,10}中随机抽取5个数且不重复
答
这里只有十个元素,用 Random 的 nextInt() 对 10 求余,产生 10 以内的元素作为访问角标。
同时需要维护一个 Set 判断是否重复,demo:
public static void main(String[] args) {
int a[]={1,2,3,4,5,6,7,8,9,10};
Random r = new Random();
int count = 10;
while(count-->0){
Set<Integer> result = new HashSet<Integer>(5);
while(result.size()<5){
int index = r.nextInt(10)%10;//范围为 10
int currentData = a[index];
if(result.contains(currentData)){
continue;
}
System.out.print("随机加入:"+ currentData);
result.add(currentData);
}
System.out.println("第"+count+"次,last随机数:"+result);
}
}
random 的随机性还是可以的,基本上很少重复的。
答
如果数组的元素本身都是不重复的,那就取出一个删除一个OK了
答
取0-9之间的不重复的5个随机数当作下标 i1,i2,i3,i4,i5 ,直接取a[i1],a[i2],a[i3],a[i4],a[i5]不就好了。
答
public static void main(String[] args) {
Integer[] nums=new Integer[] {1,2,3,4,5,6,7,8,9,10};
Set<Integer> numSet=new HashSet<>();
while (numSet.size()<5) {
int index = (int) (Math.floor(Math.random() * nums.length));
if(!numSet.contains(nums[index])) {
numSet.add(nums[index]);
}
}
System.out.println(numSet.toString());
}
答
import java.util.Random;
int a[]={1,2,3,4,5,6,7,8,9,0};
Random r = new Random();
int[] get5Random1(int list[]){
for(int i = 0; i < 100; i++){
int index = r.nextInt();
int temp = a[index];
a[index] = a[0];
a[0] = temp;
}
return a;
}