Java實現(xiàn)生成n個不重復(fù)的隨機數(shù)
本文實例為大家分享了Java實現(xiàn)生成n個不重復(fù)的隨機數(shù)的具體代碼,供大家參考,具體內(nèi)容如下
需求:
根據(jù)min和max,生成n個不重復(fù)的隨機數(shù)。(注:范圍[min,max],n <= (max - min +1))
思路:
0)、把從min到max的可能出現(xiàn)的數(shù)字全部放進一個候選List;
1)、隨機生成索引index(0 <= index <= (list.size()-1));
2)、根據(jù)index從List中取出一個數(shù),list.get(index),并移除這個元素;
代碼如下:
import java.util.ArrayList; import java.util.List; import java.util.Random; public class MyRandom { /** * 根據(jù)min和max隨機生成一個范圍在[min,max]的隨機數(shù),包括min和max * @param min * @param max * @return int */ public int getRandom(int min, int max){ Random random = new Random(); return random.nextInt( max - min + 1 ) + min; } /** * 根據(jù)min和max隨機生成count個不重復(fù)的隨機數(shù)組 * @param min * @param max * @param count * @return int[] */ public int[] getRandoms(int min, int max, int count){ int[] randoms = new int[count]; List<Integer> listRandom = new ArrayList<Integer>(); if( count > ( max - min + 1 )){ return null; } // 將所有的可能出現(xiàn)的數(shù)字放進候選list for(int i = min; i <= max; i++){ listRandom.add(i); } // 從候選list中取出放入數(shù)組,已經(jīng)被選中的就從這個list中移除 for(int i = 0; i < count; i++){ int index = getRandom(0, listRandom.size()-1); randoms[i] = listRandom.get(index); listRandom.remove(index); } return randoms; } }
小編再為大家分享一段:java產(chǎn)生10個不同隨機數(shù)的代碼:
package exercise03_jdknews; import java.util.Random; import java.util.Vector; /** * 獲取10個1-20之間的隨機數(shù),要求不能重復(fù) * * @author lgt * */ public class RandomNumberNoRepeat { public static void main(String[] args) { //創(chuàng)建一個產(chǎn)生隨機數(shù)的對象 Random r = new Random(); //創(chuàng)建一個存儲隨機數(shù)的集合 Vector<Integer> v = new Vector<Integer>(); //定義一個統(tǒng)計變量 int count = 0; while(count < 10){ int number = r.nextInt(20) + 1; //判斷number是否在集合中存在 if(!v.contains(number)){ //不在集合中,就添加 v.add(number); count++; } } //遍歷輸出 for(int i : v){ System.out.println(i); } } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java.net.SocketException: Connection reset 解決方法
最近糾結(jié)致死的一個java報錯java.net.SocketException: Connection reset 終于得到解決2013-03-03關(guān)于mybatis-plus邏輯刪除自動填充更新時間的問題
mybatis-plus是對mybatis的增強,mybatis-plus更像是面向?qū)ο缶幊?,?shù)據(jù)庫基本CRUD的操作可以不用手動編寫SQL語句,大大提高了開發(fā)的效率,這篇文章主要介紹了mybatis-plus邏輯刪除自動填充更新時間問題,需要的朋友可以參考下2022-07-07Java結(jié)構(gòu)型設(shè)計模式中的適配器模式與橋接模式解析
這篇文章主要介紹了Java結(jié)構(gòu)型設(shè)計模式中的適配器模式與橋接模式,結(jié)構(gòu)型設(shè)計模式是從程序的結(jié)構(gòu)上解決模塊之間的耦合問題,需要的朋友可以參考下2016-02-02spring異步service中處理線程數(shù)限制詳解
這篇文章主要給大家介紹了關(guān)于spring異步service中處理線程數(shù)限制的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用spring具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Java集合中的CopyOnWriteArrayList使用詳解
這篇文章主要介紹了Java集合中的CopyOnWriteArrayList使用詳解,CopyOnWriteArrayList是ArrayList的線程安全版本,從他的名字可以推測,CopyOnWriteArrayList是在有寫操作的時候會copy一份數(shù)據(jù),然后寫完再設(shè)置成新的數(shù)據(jù),需要的朋友可以參考下2023-12-12基于Java并發(fā)容器ConcurrentHashMap#put方法解析
下面小編就為大家?guī)硪黄贘ava并發(fā)容器ConcurrentHashMap#put方法解析。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06