在数组中每次生成随机选择,在android中不重复
我正在开发多项选择题游戏。它有四个整数选择。选项存储在数组列表中。我想以随机顺序显示数组中元素的选择,每次都不重复。请给我答案在数组中每次生成随机选择,在android中不重复,android,Android,我正在开发多项选择题游戏。它有四个整数选择。选项存储在数组列表中。我想以随机顺序显示数组中元素的选择,每次都不重复。请给我答案 int ans[] = new int[] { sum, sum + 1, sum + 2, sum - 1 }; ArrayList<Integer> number = new ArrayList<Integer>(); for (int i : number) { number.add(ans[i]);
int ans[] = new int[] { sum, sum + 1, sum + 2, sum - 1 };
ArrayList<Integer> number = new ArrayList<Integer>();
for (int i : number) {
number.add(ans[i]);
}
Collections.shuffle(number);
but1.setText("" + number.get(0));
but2.setText("" + number.get(1));
but3.setText("" + number.get(2));
but4.setText("" + number.get(3));
intans[]=新的int[]{sum,sum+1,sum+2,sum-1};
ArrayList编号=新的ArrayList();
for(int i:编号){
编号。添加(ans[i]);
}
收藏。洗牌(数字);
但是1.setText(“+number.get(0));
但是2.setText(“+number.get(1));
但是3.setText(“+number.get(2));
但是4.setText(“+number.get(3));
makeRandomArray返回大小输入之间的随机整数数组。因此,如果传递size=4,它将返回一个从0到3的随机数组,然后使用随机输出处理问题。希望这有帮助
/**
* Make an int random array with value from 0 to max
* @param size: size = max + 1
* @return result: an int array
*/
private int[] makeRandomArray(int size) {
int result[] = new int[size];
List<Integer> ascesdingArray = new ArrayList<>();
for (int i = 0; i < size; i++) {
ascesdingArray.add(i);
}
for (int i = 0; i < size; i++) {
int randomValue = random(ascesdingArray);
result[i] = randomValue;
}
return result;
}
/**
* Get random value in input array
* @param ascesdingArray
* @return randomValue: random element from input array
*/
private int random(List<Integer> ascesdingArray) {
int max = ascesdingArray.size() - 1;
int randomValue = 0;
if (max > 0) {
// get random index and it's value
int index = new Random().nextInt(max);
randomValue = ascesdingArray.get(index);
// remove value got from array so it will not be duplicated
ascesdingArray.remove(index);
} else if (max == 0) {
randomValue = ascesdingArray.get(0);
}
return randomValue;
}
/**
*创建一个值为0到最大值的int随机数组
*@param size:size=max+1
*@return result:一个int数组
*/
私有int[]生成随机数组(int大小){
整数结果[]=新整数[大小];
List ascesdingArray=new ArrayList();
对于(int i=0;i0){
//获取随机索引及其值
int index=new Random().nextInt(最大值);
randomValue=ascesdingArray.get(索引);
//删除从数组中获取的值,使其不会重复
上升方向。移除(索引);
}else if(max==0){
randomValue=ascesdingArray.get(0);
}
返回随机值;
}
首先,您的代码将产生一个IndexOutOfBoundsException,因为您正在迭代一个空列表,使结果列表为空,然后您将从该空列表中选择四项
最后,针对您的具体情况回答您的问题,下一个代码将起作用:
它是您的代码的简化和更正的工作版本(已测试):
List number=Arrays.asList(sum,sum+1,sum+2,sum-1);
收藏。洗牌(数字);
但是1.setText(“+number.get(0));
但是2.setText(“+number.get(1));
但是3.setText(“+number.get(2));
但是4.setText(“+number.get(3));
希望有帮助您尝试过此代码吗?
List<Integer> number = Arrays.asList(sum, sum + 1, sum + 2, sum - 1);
Collections.shuffle(number);
but1.setText("" + number.get(0));
but2.setText("" + number.get(1));
but3.setText("" + number.get(2));
but4.setText("" + number.get(3));