Java实现不重复随机数生成算法示例

需积分: 33 34 下载量 26 浏览量 更新于2024-11-12 1 收藏 7KB TXT 举报
在Java编程中,生成不重复的随机数是许多应用场景中常见的需求,尤其是在在线考试系统、抽奖系统或需要动态配置数据的场景中。本篇内容提供了四种不同的Java源代码片段,分别演示了如何使用不同方法来实现这个功能。 1. 第一个示例: 这段代码使用了一个ArrayList和一个布尔数组来确保生成的随机数不重复。通过`Random`类的`nextInt()`方法生成一个0到n-1的随机整数,然后检查该数是否已经在数组中出现过。如果没出现过,将其标记为已选择,并添加到ArrayList中。最后打印出生成的不重复随机数列表。 2. 第二个示例: 在这段代码中,创建了一个整数数组`arr`,使用`Math.random()`函数生成1到40之间的随机数(包括1和40),并确保数组中的每个元素都是唯一的。通过遍历数组并比较当前元素与前面的元素,一旦发现重复就回溯重试,直到找到一个未被占用的位置。 3. 第三个示例: 这个方法采用了更直接的方法,先创建一个包含n个元素的数组`num`,然后从中随机抽取元素填充到目标数组`arr`中。通过交换`num`数组的最后一个元素和随机索引对应的元素,保证每次选取的都是可用的值,直到`arr`数组填满。 4. 第四个示例: 使用`LinkedList<Integer>`代替ArrayList,这个代码同样实现了随机选取数组`num`中的元素填充到`arr`数组。通过随机选择`num`中的位置并交换元素,达到去重的效果。这种方法利用了链表的优势,插入和删除操作更加高效。 总结起来,这四个Java代码片段展示了四种生成不重复随机数的不同策略:使用循环和布尔数组标记法,数组排序与回溯,直接数组操作,以及利用链表的数据结构特性。每种方法都有其适用场景和性能特点,可以根据具体需求和系统设计选择最适合的实现方式。这些代码对于开发需要随机抽题功能的在线考试系统或类似应用非常实用。