国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用Java生成N個(gè)不重復(fù)的隨機(jī)數(shù),3種實(shí)例

這篇具有很好參考價(jià)值的文章主要介紹了用Java生成N個(gè)不重復(fù)的隨機(jī)數(shù),3種實(shí)例。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1、Random類和Set集合來完成

Java實(shí)現(xiàn)生成n個(gè)不重復(fù)的隨機(jī)數(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);
    }
}

上述代碼中,使用了一個(gè)while循環(huán)來生成n個(gè)不重復(fù)的隨機(jī)數(shù)。在每次循環(huán)中,先生成一個(gè)范圍在1到max之間的隨機(jī)整數(shù),然后將其加入Set集合中,由于Set集合不允許元素重復(fù),所以會(huì)自動(dòng)去重,直到包含n個(gè)元素為止。最后返回生成的隨機(jī)數(shù)集合。

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

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

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

實(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));
    }
}

上述代碼中,使用了一個(gè)for循環(huán)來生成n個(gè)不重復(fù)的隨機(jī)數(shù)。在每次循環(huán)中,先生成一個(gè)范圍在1到max之間的隨機(jī)整數(shù),然后調(diào)用contains方法來判斷該數(shù)是否已經(jīng)存在于數(shù)組中,如果不存在則加入數(shù)組。

在main方法中,我們調(diào)用generateRandomNumbers方法來生成5個(gè)不重復(fù)的1到100之間的隨機(jī)數(shù),并使用Arrays.toString打印出來,輸出結(jié)果類似于[4, 27, 52, 76, 97]。文章來源地址http://www.zghlxwxcb.cn/news/detail-607789.html

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

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

具體實(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[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)建一個(gè)包含1到max的整數(shù)數(shù)組arr,然后使用Fisher-Yates洗牌算法來隨機(jī)打亂數(shù)組中的元素,最后返回?cái)?shù)組中的后n個(gè)元素。

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

到了這里,關(guān)于用Java生成N個(gè)不重復(fù)的隨機(jī)數(shù),3種實(shí)例的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java jdk8生成隨機(jī)數(shù)

    目錄 Jdk8生成隨機(jī)數(shù) Jdk8以前 在Java 8中,可以使用ThreadLocalRandom類來生成隨機(jī)數(shù)。相比于早期的Random類,ThreadLocalRandom類可以更好地支持多線程應(yīng)用,性能也更優(yōu)。下面是使用ThreadLocalRandom類生成隨機(jī)數(shù)的幾種方法: 生成一個(gè)0到n之間的隨機(jī)整數(shù)(不包含n): 生成一個(gè)范圍在

    2024年02月12日
    瀏覽(13)
  • Java如何生成隨機(jī)數(shù)?要不要了解一下!

    Java如何生成隨機(jī)數(shù)?要不要了解一下!

    我們?cè)趯W(xué)習(xí) Java 基礎(chǔ)時(shí)就知道可以生成隨機(jī)數(shù),可以為我們枯燥的學(xué)習(xí)增加那么一丟丟的樂趣。本文就來介紹 Java 隨機(jī)數(shù)。 在 Java 中使用 Random 工具類來生成隨機(jī)數(shù),該類在 java.util 包下,在 JDK1.0 版本就存在了。 Random 單詞本身就是隨機(jī)、隨意、任意的意思。 Random 是一個(gè)普

    2024年02月06日
    瀏覽(25)
  • JAVA隨機(jī)生成十個(gè)不重復(fù)的整數(shù)(Arraylist,Set)

    JAVA隨機(jī)生成十個(gè)不重復(fù)的整數(shù)(Arraylist,Set)

    隨機(jī)生成十個(gè)不重復(fù)的整數(shù)有許多方法,這里我只寫出兩種。 第一種(Set): 先上代碼: 在看解析:Set集合中不允許有重復(fù)的元素,當(dāng)添加相同的元素時(shí),因?yàn)镾et集合的元素時(shí)唯一的,所以會(huì)覆蓋之前的相同元素,set.size()方法能定義獲取集合長(zhǎng)度,也就能判斷你所需要生成整數(shù)

    2024年02月08日
    瀏覽(16)
  • 使用java.security.SecureRandom安全生成隨機(jī)數(shù)和隨機(jī)字符串工具類

    ????????在Java中,可以使用java.security.SecureRandom和java.util.Random類來生成隨機(jī)數(shù),但是它們之間有以下區(qū)別: ? ? ? ? 1、隨機(jī)性強(qiáng)度: SecureRandom 類提供了更高的隨機(jī)性強(qiáng)度。它使用了更安全的算法和種子生成器,以提供更高質(zhì)量的隨機(jī)數(shù)。這對(duì)于需要高度安全性的應(yīng)用程

    2024年04月26日
    瀏覽(28)
  • Java RandomStringUtils隨機(jī)數(shù)工具類

    項(xiàng)目開發(fā)中有很多場(chǎng)景需要我們生成一些不重復(fù)的字符串,使用UUID是我們經(jīng)常使用的一種情況,但是UUID的長(zhǎng)度比較長(zhǎng),而且長(zhǎng)度是不可以自定義的,在實(shí)際的使用過程中可能會(huì)存在一些不方便的地方,今天我們要介紹的這個(gè)工具類,可以自由的配置生成的字符串的長(zhǎng)度、字

    2024年02月06日
    瀏覽(20)
  • java random隨機(jī)數(shù)的用法

    Java Random類是Java中生成隨機(jī)數(shù)的一個(gè)重要工具類,它提供了豐富的方法來生成不同類型的隨機(jī)數(shù)。在本文中,我們將深入探討Java Random類的用法,并介紹一些常見的應(yīng)用場(chǎng)景。 Random類位于 java.util 包中,因此在使用前需要先導(dǎo)入該包: Random類的實(shí)例化非常簡(jiǎn)單,只需調(diào)用其默

    2024年02月06日
    瀏覽(21)
  • Java 隨機(jī)數(shù)的獲得方法(5種)

    Java 隨機(jī)數(shù)的獲得方法(5種)

    產(chǎn)生的隨機(jī)數(shù)是 0 - 1 之間的一個(gè) double ,即 0 = random ?1 代碼: 結(jié)果: 當(dāng)調(diào)用 Math.random() 方法時(shí),自動(dòng)創(chuàng)建了一個(gè) 偽隨機(jī)數(shù)生成器 ,實(shí)際上用的是 new java.util.Random() 。當(dāng)接下來繼續(xù)調(diào)用 Math.random() 方法時(shí),就會(huì)使用這個(gè)新的 偽隨機(jī)數(shù)生成器 。 基本算法: linear congruential p

    2024年02月08日
    瀏覽(20)
  • Java隨機(jī)數(shù)之System/Random/SecureRandom詳解

    Java隨機(jī)數(shù)之System/Random/SecureRandom詳解

    本系列為:從零開始學(xué)Java,為千鋒教育資深Java教學(xué)老師獨(dú)家創(chuàng)作 致力于為大家講解清晰Java學(xué)習(xí)相關(guān)知識(shí)點(diǎn),含有豐富的代碼案例及講解。如果感覺對(duì)大家有幫助的話,可以【點(diǎn)個(gè)關(guān)注】持續(xù)追更~ 文末有本文重點(diǎn)總結(jié)!關(guān)于技術(shù)類問題,也歡迎大家和我們溝通交流! 我們?cè)?/p>

    2024年02月06日
    瀏覽(27)
  • 【Java代碼審計(jì)】失效認(rèn)證及不安全隨機(jī)數(shù)篇

    【Java代碼審計(jì)】失效認(rèn)證及不安全隨機(jī)數(shù)篇

    根據(jù)密碼學(xué)原理,隨機(jī)數(shù)生成器分為以下三類: 1、統(tǒng)計(jì)學(xué)偽隨機(jī)數(shù)生成器(PRNG):偽隨機(jī)數(shù)生成器從一個(gè)初始化的種子值開始計(jì)算得到序列,從種子開始,然后從種子中計(jì)算出后續(xù)值,當(dāng)種子確定后生成的隨機(jī)數(shù)也是確定的,但其輸出結(jié)果很容易預(yù)測(cè),因此容易復(fù)制數(shù)值流

    2024年01月16日
    瀏覽(21)
  • Unity 中的隨機(jī)數(shù)的基礎(chǔ)常用的隨機(jī)數(shù)生成方法

    在 Unity 中,可以使用 Random 類來生成隨機(jī)數(shù)。以下是一些常用的隨機(jī)數(shù)生成方法: Random.Range(min, max):生成一個(gè)在[min, max)范圍內(nèi)的隨機(jī)整數(shù)。 Random.value:生成一個(gè)在[0, 1)范圍內(nèi)的隨機(jī)浮點(diǎn)數(shù)。 Random.insideUnitCircle:生成一個(gè)在單位圓內(nèi)的隨機(jī)二維向量。 Random.insideUnitSphere:生成

    2024年02月20日
    瀏覽(43)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包