如何从列表中获取7个随机数

时间:2016-07-29 21:40:50

标签: java random

我有以下代码:

public static void main(String[] args) {
    ArrayList<Integer>  list1 = new ArrayList<Integer>();
    list1.add(10);
    list1.add(8);
    list1.add(5);
    list1.add(3);
    list1.add(9);
    list1.add(2);

    Random e = new Random();

    ArrayList<Integer>  list2 = new ArrayList<Integer>();
    list2.add(50);
    list2.add(18);
    list2.add(44);
    list2.add(4);
    list2.add(23);
    list2.add(37);
    list2.add(38);
    list2.add(26);
    list2.add(25);
    list2.add(10);
    list2.add(30);
    list2.add(49);
    list2.add(14);
    list2.add(29);
    list2.add(42);
    list2.add(5);
    list2.add(11);
    list2.add(21);
    list2.add(79);
    list2.add(15);
    list2.add(17);
    list2.add(24);
    list2.add(1);
    list2.add(13);
    list2.add(45);
    list2.add(6);
    list2.add(27);

    Random n = new Random();

    System.out.println(list1.get(n.nextInt(list1.size() - 1)));
    System.out.println(list2.get(n.nextInt(list.size() - 1)));

}

如何从list1获得2个随机数(无重复),同时从list2获得5个随机数(无重复),而无需运行代码7次以获得我需要的7个数字

2 个答案:

答案 0 :(得分:1)

每当从列表中获取随机值时,请删除该元素。

如果需要,请创建列表副本以保留原始数据

public int[] getRandomData(ArrayList<Integer> list, int count) {
    int[] result = new int[count];
    while (count > 0 && list.size() > 0) {
         int index = (int) (Math.random() * list.size());
         result[count - 1] = list.get(index);
         list.remove(index);
         count--;
    }
    return result;
}

呼叫:

int[] stuffFromList1 = getRandomData(list1, 2);
int[] stuffFromList2 = getRandomData(list2, 5);

答案 1 :(得分:1)

如果你随机播放列表,那么你不再需要使用Random类了,因为Collection.shuffle会为你做这个......

实施例

 public static void main(String[] args) {
    List<Integer> list1 = new ArrayList<>();
    list1.addAll(Arrays.asList(new Integer[] { 8, 5, 3, 9, 2 }));

    List<Integer> list2 = new ArrayList<>();
    list2.addAll(Arrays.asList(new Integer[] { 50, 18, 44, 4, 23, 37, 38, 26, 25, 10, 30, 49, 14, 29, 42, 5, 11, 21,
        79, 15, 17, 24, 1, 13, 45, 6, 27, }));
    Set<Integer> randomlist1 = new HashSet<>();
    Set<Integer> randomlist2 = new HashSet<>();
    populate(list1, randomlist1, 1);
    populate(list2, randomlist2, 5);
    System.out.println(randomlist1);
    System.out.println(randomlist2);
    }

    private static void populate(List<Integer> list1, Set<Integer> randomlist1, int i) {
    while (randomlist1.size() < i) {
        Collections.shuffle(list1);
        randomlist1.add(list1.get(0));
    }
    }