从一个集合或者数组中随机抽取几个不同的值,不同的开发者应该有不同的实现方式,我这里说一下我这边项目中用到的一种实现方法
核心代码如下:
1、判断的方法
/**
* 使用一个List来保存数组,每次随机取出一个移除一个。
*/
public Integer[] getRandomArray(int n, Integer[] strArray) {
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < strArray.length; i++) {
list.add(strArray[i]);
}
Random random = new Random();
// 当取出的元素个数大于数组的长度时,返回null
if (n > list.size()) {
return null;
}
Integer[] result = new Integer[n];
for (int i = 0; i < n; i++) {
// 去一个随机数,随机范围是list的长度
int index = random.nextInt(list.size());
result[i] = list.get(index);
list.remove(index);
}
return result;
}
2、使用方式
//创建一个集合来存放可以获取的值
private ArrayList<Integer> canSelectIntArr = new ArrayList<>();
private Integer[] canSelectIntStrs = null;
/**
* 初始化可以可以选择的动作数
*/
private void initCanSelectIntsArr() {
canSelectIntArr.clear();
canSelectIntArr.add(0);
canSelectIntArr.add(1);
canSelectIntArr.add(2);
canSelectIntArr.add(3);
canSelectIntStrs = new Integer[canSelectIntArr.size()];
for (int i = 0; i < canSelectIntArr.size(); i++) {
canSelectIntStrs[i] = canSelectIntArr.get(i);
}
}
//最终调用
Integer[] randomArray = getRandomArray(actionAmount, canSelectIntStrs);