最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java生成N個不重復(fù)的隨機數(shù)的三種方法總結(jié)

 更新時間:2023年10月08日 14:54:15   作者:芒果很忙耶  
這篇文章主要為大家詳細(xì)介紹了三種Java生成N個不重復(fù)的隨機數(shù)的方法,文中的示例代碼講解詳細(xì),具有一定的參考價值,有需要的可以了解下

1、Random類和Set集合來完成

Java實現(xiàn)生成n個不重復(fù)的隨機數(shù)可以使用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循環(huán)來生成n個不重復(fù)的隨機數(shù)。在每次循環(huán)中,先生成一個范圍在1到max之間的隨機整數(shù),然后將其加入Set集合中,由于Set集合不允許元素重復(fù),所以會自動去重,直到包含n個元素為止。最后返回生成的隨機數(shù)集合。

在main方法中,我們調(diào)用generateRandomNumbers方法來生成5個不重復(fù)的1到100之間的隨機數(shù),并使用System.out.println打印出來,輸出結(jié)果類似于[4, 27, 52, 76, 97]

2、使用數(shù)組來存儲生成的隨機數(shù)

每次生成隨機數(shù)之前判斷數(shù)組中是否已經(jīng)存在該數(shù),如果存在就繼續(xù)生成下一個隨機數(shù),直到生成了n個不重復(fù)的數(shù)為止

實現(xià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循環(huán)來生成n個不重復(fù)的隨機數(shù)。在每次循環(huán)中,先生成一個范圍在1到max之間的隨機整數(shù),然后調(diào)用contains方法來判斷該數(shù)是否已經(jīng)存在于數(shù)組中,如果不存在則加入數(shù)組。

在main方法中,我們調(diào)用generateRandomNumbers方法來生成5個不重復(fù)的1到100之間的隨機數(shù),并使用Arrays.toString打印出來,輸出結(jié)果類似于[4, 27, 52, 76, 97]。

3、使用Fisher-Yates洗牌算法(也稱為Knuth洗牌算法)

除了使用Random類和Set集合或數(shù)組來生成n個不重復(fù)的隨機數(shù),還可以使用Fisher-Yates洗牌算法(也稱為Knuth洗牌算法)來實現(xiàn)。該算法的思路是:從原始數(shù)組中隨機選擇一個元素,將其與數(shù)組的第一個元素交換位置,然后從剩余的n-1個元素中隨機選擇一個元素,將其與數(shù)組的第二個元素交換位置,以此類推,直到遍歷完所有的n個元素為止。

具體實現(xià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));
    }
}

上述代碼中,首先創(chuàng)建一個包含1到max的整數(shù)數(shù)組arr,然后使用Fisher-Yates洗牌算法來隨機打亂數(shù)組中的元素,最后返回數(shù)組中的后n個元素。

在main方法中,我們調(diào)用generateRandomNumbers方法來生成5個不重復(fù)的1到100之間的隨機數(shù),并使用Arrays.toString打印出來,輸出結(jié)果類似于[4, 27, 52, 76, 97]。

到此這篇關(guān)于Java生成N個不重復(fù)的隨機數(shù)的三種方法總結(jié)的文章就介紹到這了,更多相關(guān)Java生成不重復(fù)隨機數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解使用Spring Boot的AOP處理自定義注解

    詳解使用Spring Boot的AOP處理自定義注解

    本篇文章主要介紹了詳解使用Spring Boot的AOP處理自定義注解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • JAVA實現(xiàn)DOC轉(zhuǎn)PDF的示例代碼

    JAVA實現(xiàn)DOC轉(zhuǎn)PDF的示例代碼

    Word作為目前主流的文本編輯軟件之一,功能十分強大,但是在傳輸?shù)臅r候不穩(wěn)定,那么如何從DOC轉(zhuǎn)PDF,本文就來介紹一下,感興趣的可以了解一下
    2021-08-08
  • Java如何利用LocalDate獲取某個月的第一天與最后一天日期

    Java如何利用LocalDate獲取某個月的第一天與最后一天日期

    這篇文章主要給大家介紹了關(guān)于Java如何利用LocalDate獲取某個月的第一天與最后一天日期的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-01-01
  • MyBatis中TypeHandler基本用法與示例

    MyBatis中TypeHandler基本用法與示例

    本文主要介紹了MyBatis中TypeHandler基本用法與示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-11-11
  • java圖形驗證碼生成工具類 web頁面校驗驗證碼

    java圖形驗證碼生成工具類 web頁面校驗驗證碼

    這篇文章主要為大家詳細(xì)介紹了java圖形驗證碼生成工具類,web頁面校驗驗證碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Java調(diào)用第三方http接口的常用方式總結(jié)

    Java調(diào)用第三方http接口的常用方式總結(jié)

    這篇文章主要介紹了Java調(diào)用第三方http接口的常用方式總結(jié),具有很好的參考價值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • SpringBoot 集成 Redis實現(xiàn)緩存與分布式鎖的全過程(提升系統(tǒng)性能與并發(fā)能力)

    SpringBoot 集成 Redis實現(xiàn)緩存與分布式鎖的全過程(提升系統(tǒng)性能與并發(fā)能力)

    本文介紹了SpringBoot與Redis的實戰(zhàn)應(yīng)用,涵蓋了環(huán)境搭建、緩存注解使用、手動緩存操作、分布式鎖實現(xiàn)以及常見緩存問題解決方案,通過實際代碼示例,幫助讀者快速掌握Redis的核心應(yīng)用,提升系統(tǒng)性能和并發(fā)處理能力,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • Java由淺入深講解繼承上

    Java由淺入深講解繼承上

    繼承就是可以直接使用前輩的屬性和方法。自然界如果沒有繼承,那一切都是處于混沌狀態(tài)。多態(tài)是同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力。多態(tài)就是同一個接口,使用不同的實例而執(zhí)行不同操作
    2022-04-04
  • Mybatis攔截器打印sql問題

    Mybatis攔截器打印sql問題

    這篇文章主要介紹了Mybatis攔截器打印sql問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java中為什么不同的返回類型不算方法重載

    Java中為什么不同的返回類型不算方法重載

    這篇文章主要介紹了Java中為什么不同的返回類型不算方法重載,方法重載是指在同一個類中,定義了多個同名方法,但每個方法的參數(shù)類型或者是參數(shù)個數(shù)不同就是方法重載,下文詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-05-05

最新評論

扬州市| 宝清县| 柳林县| 阿尔山市| 徐闻县| 金华市| 香格里拉县| 亚东县| 双鸭山市| 湖北省| 康保县| 芜湖县| 自治县| 澎湖县| 玉田县| 泾源县| 阿坝| 阿尔山市| 横峰县| 蓬莱市| 务川| 汝城县| 武宣县| 武鸣县| 茂名市| 东光县| 肥乡县| 斗六市| 富源县| 会泽县| 满洲里市| 澄江县| 五大连池市| 浦城县| 三河市| 浦北县| 漾濞| 浦江县| 万盛区| 定西市| 禹州市|