Java案例實現(xiàn)不重復(fù)的隨機數(shù)
需求:獲得十個1-20的隨機數(shù),要求隨機數(shù)不能重復(fù),存儲到集合中并遍歷
分析:
- 1.創(chuàng)建Set集合對象,可以使用
HashSet也可以使用TreeSet,區(qū)別在于TreeSet是排序后的 - 2.創(chuàng)建隨機數(shù)對象,獲取一個隨機數(shù)
- 3.判斷集合長度是否大于10,是停止生成、存儲并遍歷
- 否:繼續(xù)生成直到長度大于10停止生成、存儲并遍歷
- 4.輸出
代碼:
public class SetDemo {
? public static void main(String[] args) {
? ? ? //創(chuàng)建Set集合對像
? ? ? Set<Integer> s=new TreeSet<Integer>();
? ? ? //創(chuàng)建隨機數(shù)對象
? ? ? Random r=new Random();
? ? ? while(s.size()<10){
? ? ? ? ? int num= r.nextInt(20)+1;
? ? ? ? ? s.add(num);
? ? ? }
? ? ? for (Integer i:s){
? ? ? ? ? System.out.println(i);
? ? ? }
? }
}
?補充:
通過單個數(shù)組簡易實現(xiàn)不重復(fù)隨機數(shù)生成,先上源碼。
/**
* 獲取隨機數(shù)組
* @param 源數(shù)組
?* @param size 目標(biāo)數(shù)組大小
?* @return 隨機數(shù)組
?*/
public static int[] getRandomRes(int[] source,int size){
? ? if (source == null && size > source.length) {
? ? ? ? return;
? ? }
? ? int[] result = new int[size];
? ? Random random = new Random();
? ? for (int i = 0; i < size; i++) {
? ? ? ? int randomIndex = random.nextInt(source.length - 1 - i);
? ? ? ? int randomRes = source[randomIndex];
? ? ? ? result[i] = randomRes;
? ? ? ? int temp = source[randomIndex];
? ? ? ? source[randomIndex] = source[source.length - 1 - i];
? ? ? ? source[source.length - 1 - i] = temp;
? ? }
? ? return result;
}下面看圖解,數(shù)字為數(shù)組的index。

黑色數(shù)字表示能隨機到的數(shù),紅色代表不能隨機到數(shù)。
因此只能隨機到index:0~4的數(shù),假設(shè)是2,然后將2與index5互換位置。

此時結(jié)果result[] = {2}
繼續(xù)循環(huán)

從前index:0~3中循環(huán),假設(shè)取出index0,與index4互換,此時結(jié)果為result = {2,0},依次類推。
優(yōu)點:簡單快捷
缺點:每次無法取到最后一個數(shù)。
不斷隨機,使用Set去重
/**
*生成隨機數(shù)組
*@param size 目標(biāo)數(shù)組大小
*@param max 目標(biāo)數(shù)最大值
*/
public Set<Integer> getRandomSet(int size,int max){
? ? Random random= new Random();
? ? Set<Integer> result= new LinkedHashSet<Integer>();
? ? while (generated.size() < size)
? ? {
? ? ? ? Integer next = rng.nextInt(max) + 1;
? ? ? ? generated.add(next);
? ? }
}此處使用LinkedHashSet保證插入順序與結(jié)果相同。
到此這篇關(guān)于Java案例實現(xiàn)不重復(fù)的隨機數(shù)的文章就介紹到這了,更多相關(guān)Java不重復(fù)隨機數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Junit測試找不到SpringJUnit4ClassRunner.class的解決
這篇文章主要介紹了Spring Junit測試找不到SpringJUnit4ClassRunner.class的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
Java實現(xiàn)同步枚舉類數(shù)據(jù)到數(shù)據(jù)庫
這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)同步枚舉類數(shù)據(jù)到數(shù)據(jù)庫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08
JAVA如何獲取jvm和操作系統(tǒng)相關(guān)信息
這篇文章主要介紹了JAVA獲取jvm和操作系統(tǒng)相關(guān)信息,使用Java自帶的類進行獲取系統(tǒng)運行的相關(guān)信息,在這整理記錄分享一下,需要的朋友可以參考下2022-10-10
kafka消費者kafka-console-consumer接收不到數(shù)據(jù)的解決
這篇文章主要介紹了kafka消費者kafka-console-consumer接收不到數(shù)據(jù)的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
使用Java和SNMP4J實現(xiàn)SNMP操作完整代碼
這篇文章主要介紹了如何使用Java和SNMP4J庫進行SNMP操作,包括初始化SNMP、創(chuàng)建目標(biāo)、創(chuàng)建PDU、發(fā)送SNMP請求和處理響應(yīng)等內(nèi)容,通過編寫SnmpUtil類,展示了完整的SNMP操作流程,需要的朋友可以參考下2024-12-12
Java 實戰(zhàn)交易平臺項目之寵物在線商城系統(tǒng)
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實現(xiàn)一個寵物在線商城系統(tǒng),大家可以在過程中查缺補漏,提升水平2021-11-11
解決idea2020.1 用gitee push推送被拒絕的原因(親測有效)
這篇文章主要介紹了解決idea2020.1 用gitee push推送被拒絕的原因(親測有效),本文給大家分享解決方案,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08

