List data = new ArrayList<>();
data.add("鼠");
data.add("牛");
data.add("虎");
data.add("兔");
data.add("龙");
data.add("蛇");
data.add("马");
data.add("羊");
data.add("猴");
data.add("猪");
data.add("狗");
data.add("鸡");
public static List getRandomList(List paramList,int count){
if(paramList.size() return paramList;
}
Random random=new Random();
List tempList=new ArrayList();
List newList=new ArrayList();
int temp=0;
for(int i=0;i<count;i++){
temp=random.nextInt(paramList.size());//将产生的随机数作为被抽list的索引
if(!tempList.contains(temp)){
tempList.add(temp);
newList.add(paramList.get(temp));
}
else{
i--;
}
}
return newList;
}
Collections.shuffle(data),打乱顺序,然后取值就可以了。
Integer random=RandomUtils.nextInt(list.size()); 用这个
这是一个数学问题,将十二生肖抽象为连续的12个数字比如0-12,区间[0,1),[1,2),[2,3)...[11,12)分别代表一个生肖。完成取两个随机生肖,可以分两步走,第一步,从0-12中随机选取一个数。第二步,去除一个生肖的区间长度,0-11之间表示除刚选择生肖外的11个生肖(先确定哪个区间对应哪个生肖),然后从0-11之间随机选择一个数。
直接从 0-11 先取一个随机数,然后再取一个随机数,如果和前一个相同则再取一次,直到取出2个不同的随机数不就可以了?
获取数组长度,在0-长度之间随机取数,然后作为数组的index进行取值
使用java随机数,长度为list的size
for循环,然后用random随机取集合下标
先用random随机一个大于等于2,小于等于12的数,确定出要取几个元素。
然后for循环确定要取的元素个数,再次用random取出0-11的随机数,
将随机数作为你list集合的索引取出对应的值就可以了
循环过程配合随机函数可以实现
random生成随机数,使用for循环获取,下标为随机数的,对象
循环一个随机取数的函数就可以了
data.get((int)Math.random()*12)
random 获取随机下标
public class RandaomData {
public static void main(String[] args) {
List data = new ArrayList<>();
data.add("鼠");
data.add("牛");
data.add("虎");
data.add("兔");
data.add("龙");
data.add("蛇");
data.add("马");
data.add("羊");
data.add("猴");
data.add("猪");
data.add("狗");
data.add("鸡");
//集合随机取2个以上元素怎么取?
ArrayList<String> list = new ArrayList<>();
int rd = new Random().nextInt(11) + 2; //生成[2,13)
for (int i = 0; i < rd; i++) {
int index = new Random().nextInt(data.size()); //获取data集合中的元素索引值
if (!list.contains(data.get(index).toString()))
list.add(data.get(index).toString()); //将不重复的元素添加到新的list集合
}
if (list.size() >= 2) {
System.out.println(list);
}else{
System.out.println("请重新获取");
}
}
}