gpt4 book ai didi

java - 如何从 arraylist 中获取随机项目而不在 android 中重复

转载 作者:行者123 更新时间:2023-11-29 05:49:46 31 4
gpt4 key购买 nike

我有一个对象的 ArrayList,我希望从中获取特定位置的项目,但每次我启动 Activity 时,检索到的位置应该是随机的,并且在每个位置项目都不会重复之前完全找回。我使用了这个方法:

public static int getRandomNumber(ArrayList<Integer> arr)
throws IllegalArgumentException {
try {
Random random = new Random();
int select = random.nextInt(arr.size());
int randomnum = arr.get(select);
GlobalData.randList.remove(select);
return randomnum;
} catch (IllegalArgumentException e) {

for (int i = 0; i < arr.size(); i++) {

GlobalData.randList.add(i);

}
return 0;
}

但它不起作用,比如重复数字即将到来,这可能是有原因的,因为每次我都重新启动该 Activity 。我是在 oncreate 而不是 onResume 中完成的,但它没有像我预期的那样工作?还有其他方法可以使用它吗?有什么解决办法吗?

最佳答案

使用 Collections.shuffle() 来打乱数组。使用另一个变量来跟踪数组中的当前位置。每次检索新值时都会增加变量。到达数组末尾后重新洗牌。

引用: Shuffling algorithms

public class RandomArray {
ArrayList<Integer> array = null;
int position = 0;

public RandomArray(ArrayList<Integer> arr) {
array = arr;
position = arr.size();
}

public int getNext() {
if (position == array.size()) {
position = 0;
Collections.shuffle(array);
}
return array.get(position++);
}
}

关于java - 如何从 arraylist 中获取随机项目而不在 android 中重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14383539/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com