Java如何从数组中随机选取并删除2个不同元素 解决随机重复问题
问题根因
- 随机元素的生成逻辑写在了循环外面,全程只生成了1次随机值,循环只是重复打印同一个已经生成好的元素,自然不会输出两个不同的结果
- 现有代码没有实现「删除已选中元素」的逻辑,就算把随机生成逻辑移到循环内,也存在两次随机命中同一个索引的概率,无法保证拿到两个不同的元素
修正方案
可以先将数组转为可变的ArrayList,每次随机选中元素后直接从列表中移除,确保第二次不会再选中同一个元素,示例代码如下:
import java.util.ArrayList; import java.util.Arrays; import java.util.Random; public class RandomPick { public static void main(String[] args) { String[] names = {"jey","abby","alyssa","cole","yzabel","miho"}; // 数组转可变ArrayList ArrayList<String> nameList = new ArrayList<>(Arrays.asList(names)); Random rand = new Random(); for(int i = 0; i < 2; i++){ // 每次循环都基于当前列表的长度生成随机索引 int randomIndex = rand.nextInt(nameList.size()); // 取出随机元素 String pickedName = nameList.get(randomIndex); System.out.println(pickedName); // 从列表中移除已选中的元素,避免重复选取 nameList.remove(randomIndex); } } }
如果需要保留原数组的完整数据,可以提前复制一份数组再做转换操作即可。
内容的提问来源于stack exchange,提问作者koharoo
相关产品推荐
相关产品推荐

