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

这篇具有很好参考价值的文章主要介绍了用Java生成N个不重复的随机数,3种实例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、Random类和Set集合来完成

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]

2、使用数组来存储生成的随机数

每次生成随机数之前判断数组中是否已经存在该数,如果存在就继续生成下一个随机数,直到生成了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]。文章来源地址https://www.toymoban.com/news/detail-607789.html

3、使用Fisher-Yates洗牌算法(也称为Knuth洗牌算法)

除了使用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]。

到了这里,关于用Java生成N个不重复的随机数,3种实例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java jdk8生成随机数

    目录 Jdk8生成随机数 Jdk8以前 在Java 8中,可以使用ThreadLocalRandom类来生成随机数。相比于早期的Random类,ThreadLocalRandom类可以更好地支持多线程应用,性能也更优。下面是使用ThreadLocalRandom类生成随机数的几种方法: 生成一个0到n之间的随机整数(不包含n): 生成一个范围在

    2024年02月12日
    浏览(40)
  • Java如何生成随机数?要不要了解一下!

    我们在学习 Java 基础时就知道可以生成随机数,可以为我们枯燥的学习增加那么一丢丢的乐趣。本文就来介绍 Java 随机数。 在 Java 中使用 Random 工具类来生成随机数,该类在 java.util 包下,在 JDK1.0 版本就存在了。 Random 单词本身就是随机、随意、任意的意思。 Random 是一个普

    2024年02月06日
    浏览(51)
  • JAVA随机生成十个不重复的整数(Arraylist,Set)

    随机生成十个不重复的整数有许多方法,这里我只写出两种。 第一种(Set): 先上代码: 在看解析:Set集合中不允许有重复的元素,当添加相同的元素时,因为Set集合的元素时唯一的,所以会覆盖之前的相同元素,set.size()方法能定义获取集合长度,也就能判断你所需要生成整数

    2024年02月08日
    浏览(41)
  • 使用java.security.SecureRandom安全生成随机数和随机字符串工具类

            在Java中,可以使用java.security.SecureRandom和java.util.Random类来生成随机数,但是它们之间有以下区别:         1、随机性强度: SecureRandom 类提供了更高的随机性强度。它使用了更安全的算法和种子生成器,以提供更高质量的随机数。这对于需要高度安全性的应用程

    2024年04月26日
    浏览(42)
  • java random随机数的用法

    Java Random类是Java中生成随机数的一个重要工具类,它提供了丰富的方法来生成不同类型的随机数。在本文中,我们将深入探讨Java Random类的用法,并介绍一些常见的应用场景。 Random类位于 java.util 包中,因此在使用前需要先导入该包: Random类的实例化非常简单,只需调用其默

    2024年02月06日
    浏览(43)
  • Java RandomStringUtils随机数工具类

    项目开发中有很多场景需要我们生成一些不重复的字符串,使用UUID是我们经常使用的一种情况,但是UUID的长度比较长,而且长度是不可以自定义的,在实际的使用过程中可能会存在一些不方便的地方,今天我们要介绍的这个工具类,可以自由的配置生成的字符串的长度、字

    2024年02月06日
    浏览(39)
  • Java 随机数的获得方法(5种)

    产生的随机数是 0 - 1 之间的一个 double ,即 0 = random  1 代码: 结果: 当调用 Math.random() 方法时,自动创建了一个 伪随机数生成器 ,实际上用的是 new java.util.Random() 。当接下来继续调用 Math.random() 方法时,就会使用这个新的 伪随机数生成器 。 基本算法: linear congruential p

    2024年02月08日
    浏览(38)
  • Java随机数之System/Random/SecureRandom详解

    本系列为:从零开始学Java,为千锋教育资深Java教学老师独家创作 致力于为大家讲解清晰Java学习相关知识点,含有丰富的代码案例及讲解。如果感觉对大家有帮助的话,可以【点个关注】持续追更~ 文末有本文重点总结!关于技术类问题,也欢迎大家和我们沟通交流! 我们在

    2024年02月06日
    浏览(62)
  • 【Java代码审计】失效认证及不安全随机数篇

    根据密码学原理,随机数生成器分为以下三类: 1、统计学伪随机数生成器(PRNG):伪随机数生成器从一个初始化的种子值开始计算得到序列,从种子开始,然后从种子中计算出后续值,当种子确定后生成的随机数也是确定的,但其输出结果很容易预测,因此容易复制数值流

    2024年01月16日
    浏览(39)
  • JS - 生成随机数的方法汇总(不同范围、类型的随机数)

    (1)使用 random() 方法可以返回一个介于 0 ~ 1 之间的伪随机数(包括 0,不包括 1)。 (2)下面是一个测试样例 (1)这种最简单,因为和 random 的特点保持一致。只需使用如下公式即可: (2)比如下面生成 [10,15) 范围内的随机浮点数。 因为 random 的特点,要取得这几个区间

    2023年04月08日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包