我有以下代码:
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个数字
答案 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));
}
}