文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

用Java生成N个不重复的随机数,3种实例

2023-08-19 14:01

关注

Java实现生成n个不重复的随机数可以使用Java中的Random类和Set集合来完成

具体代码如下:

import java.util.HashSet;import java.util.Random;import java.util.Set;public class RandomNumberGenerator {    public static Set<Integer> generateRandomNumbers(int n, int max) {        if (n > max) {            throw new IllegalArgumentException("n must be less than or equal to max");        }        Set<Integer> set = new HashSet<>();        Random random = new Random();        while (set.size() < n) {            int num = random.nextInt(max) + 1;            set.add(num);        }        return set;    }    public static void main(String[] args) {        Set<Integer> set = generateRandomNumbers(5, 100);        System.out.println(set);    }}

上述代码中,使用了一个while循环来生成n个不重复的随机数。在每次循环中,先生成一个范围在1到max之间的随机整数,然后将其加入Set集合中,由于Set集合不允许元素重复,所以会自动去重,直到包含n个元素为止。最后返回生成的随机数集合。

在main方法中,我们调用generateRandomNumbers方法来生成5个不重复的1到100之间的随机数,并使用System.out.println打印出来,输出结果类似于[4, 27, 52, 76, 97]

每次生成随机数之前判断数组中是否已经存在该数,如果存在就继续生成下一个随机数,直到生成了n个不重复的数为止

实现代码如下:

import java.util.Arrays;import java.util.Random;public class RandomNumberGenerator {    public static int[] generateRandomNumbers(int n, int max) {        if (n > max) {            throw new IllegalArgumentException("n must be less than or equal to max");        }        int[] arr = new int[n];        Random random = new Random();        for (int i = 0; i < n; i++) {            int num;            do {                num = random.nextInt(max) + 1;            } while (contains(arr, num));            arr[i] = num;        }        return arr;    }    private static boolean contains(int[] arr, int num) {        for (int i : arr) {            if (i == num) {                return true;            }        }        return false;    }    public static void main(String[] args) {        int[] arr = generateRandomNumbers(5, 100);        System.out.println(Arrays.toString(arr));    }}

上述代码中,使用了一个for循环来生成n个不重复的随机数。在每次循环中,先生成一个范围在1到max之间的随机整数,然后调用contains方法来判断该数是否已经存在于数组中,如果不存在则加入数组。

在main方法中,我们调用generateRandomNumbers方法来生成5个不重复的1到100之间的随机数,并使用Arrays.toString打印出来,输出结果类似于[4, 27, 52, 76, 97]。

除了使用Random类和Set集合或数组来生成n个不重复的随机数,还可以使用Fisher-Yates洗牌算法(也称为Knuth洗牌算法)来实现。该算法的思路是:从原始数组中随机选择一个元素,将其与数组的第一个元素交换位置,然后从剩余的n-1个元素中随机选择一个元素,将其与数组的第二个元素交换位置,以此类推,直到遍历完所有的n个元素为止。

具体实现代码如下:

import java.util.Arrays;import java.util.Random;public class RandomNumberGenerator {    public static int[] generateRandomNumbers(int n, int max) {        if (n > max) {            throw new IllegalArgumentException("n must be less than or equal to max");        }        int[] arr = new int[max];        for (int i = 0; i < max; i++) {            arr[i] = i + 1;        }        Random random = new Random();        for (int i = max - 1; i >= max - n; i--) {            int index = random.nextInt(i + 1);            int temp = arr[index];            arr[index] = arr[i];            arr[i] = temp;        }        return Arrays.copyOfRange(arr, max - n, max);    }    public static void main(String[] args) {        int[] arr = generateRandomNumbers(5, 100);        System.out.println(Arrays.toString(arr));    }}

上述代码中,首先创建一个包含1到max的整数数组arr,然后使用Fisher-Yates洗牌算法来随机打乱数组中的元素,最后返回数组中的后n个元素。

在main方法中,我们调用generateRandomNumbers方法来生成5个不重复的1到100之间的随机数,并使用Arrays.toString打印出来,输出结果类似于[4, 27, 52, 76, 97]。

来源地址:https://blog.csdn.net/qq_19843217/article/details/131123861

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯