Java n选k程序

来源:互联网 发布:淘宝网址转换 编辑:程序博客网 时间:2024/06/05 00:47

写一个小程序,实现n个数据里面随机选择k个,想到了两种方式:

  1. 数据放在数组中,随即产生一个index,将最后一个元素挪到index的位置,并n–,保证已经被抽到的数值不会被在此抽到。
  2. 把数据放在set中,随机选择一个数据,并在set中remove即可,对于如何随机删除set中的一个元素,待解决。

上代码:

package CoreJava;import java.util.Arrays;import java.util.HashSet;import java.util.Scanner;/** * Created by Wht on 2016/11/23. * E-mail: buaawht@163.com */public class LotteryDrawing {    public static void main(String[] args) {        /*写个n选k的抽奖程序,set和array两种方式*/        Scanner in = new Scanner(System.in);        int n, k;        System.out.println("输出总个数:");        n = in.nextInt();        System.out.println("输入待选个数:");        k = in.nextInt();        int[]num = new int[n];        for (int i=0 ; i<n; i++) {            num[i] = i+1;        }        int[]res = new int[k];        System.out.println("可选数字如下:");        System.out.println(Arrays.toString(num));        System.out.println("数组式计算中。。。。");        int[] array = Arrays.copyOf(num, num.length);        for (int i =0; i<k; i++){            int r = (int)(Math.random()*n);            res[i] = array[r];            array[r] = array[--n];        }        System.out.println("n选k的结果为:");        System.out.println(Arrays.toString(res));        /* set 方法待完成        System.out.println("set式计算中。。。");        HashSet<Integer> hs = new HashSet<Integer>();        for (int i=0; i<n; i++){            hs.add(num[i]);        }        for (int i=0; i<k; i++){            //int r = (int)(Math.random()*n);            hs.remove(num[i]);            res[i] = num[r];        }        System.out.println("n选k的结果为:");        System.out.println(Arrays.toString(res));*/    }}
0 0