Java實(shí)現(xiàn)生成n個(gè)不重復(fù)的隨機(jī)數(shù)
本文實(shí)例為大家分享了Java實(shí)現(xiàn)生成n個(gè)不重復(fù)的隨機(jī)數(shù)的具體代碼,供大家參考,具體內(nèi)容如下
需求:
根據(jù)min和max,生成n個(gè)不重復(fù)的隨機(jī)數(shù)。(注:范圍[min,max],n <= (max - min +1))
思路:
0)、把從min到max的可能出現(xiàn)的數(shù)字全部放進(jìn)一個(gè)候選List;
1)、隨機(jī)生成索引index(0 <= index <= (list.size()-1));
2)、根據(jù)index從List中取出一個(gè)數(shù),list.get(index),并移除這個(gè)元素;
代碼如下:
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class MyRandom {
/**
* 根據(jù)min和max隨機(jī)生成一個(gè)范圍在[min,max]的隨機(jī)數(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隨機(jī)生成count個(gè)不重復(fù)的隨機(jī)數(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ù)字放進(jìn)候選list
for(int i = min; i <= max; i++){
listRandom.add(i);
}
// 從候選list中取出放入數(shù)組,已經(jīng)被選中的就從這個(gè)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個(gè)不同隨機(jī)數(shù)的代碼:
package exercise03_jdknews;
import java.util.Random;
import java.util.Vector;
/**
* 獲取10個(gè)1-20之間的隨機(jī)數(shù),要求不能重復(fù)
*
* @author lgt
*
*/
public class RandomNumberNoRepeat {
public static void main(String[] args) {
//創(chuàng)建一個(gè)產(chǎn)生隨機(jī)數(shù)的對(duì)象
Random r = new Random();
//創(chuàng)建一個(gè)存儲(chǔ)隨機(jī)數(shù)的集合
Vector<Integer> v = new Vector<Integer>();
//定義一個(gè)統(tǒng)計(jì)變量
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);
}
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 如何用java生成指定范圍的隨機(jī)數(shù)
- Java中生成隨機(jī)數(shù)的實(shí)現(xiàn)方法總結(jié)
- Java生成隨機(jī)數(shù)的2種示例方法代碼
- 史上最全的java隨機(jī)數(shù)生成算法分享
- java生成指定范圍隨機(jī)數(shù)的多種代碼
- Java編程實(shí)現(xiàn)生成給定范圍內(nèi)不重復(fù)隨機(jī)數(shù)的方法小結(jié)
- Java編程中隨機(jī)數(shù)的生成方式總結(jié)
- java生成隨機(jī)數(shù)(字符串)示例分享
- Java中隨機(jī)數(shù)生成常見(jiàn)的幾種方式及適用場(chǎng)景
相關(guān)文章
關(guān)于mybatis-plus邏輯刪除自動(dòng)填充更新時(shí)間的問(wèn)題
mybatis-plus是對(duì)mybatis的增強(qiáng),mybatis-plus更像是面向?qū)ο缶幊?,?shù)據(jù)庫(kù)基本CRUD的操作可以不用手動(dòng)編寫(xiě)SQL語(yǔ)句,大大提高了開(kāi)發(fā)的效率,這篇文章主要介紹了mybatis-plus邏輯刪除自動(dòng)填充更新時(shí)間問(wèn)題,需要的朋友可以參考下2022-07-07
Java結(jié)構(gòu)型設(shè)計(jì)模式中的適配器模式與橋接模式解析
這篇文章主要介紹了Java結(jié)構(gòu)型設(shè)計(jì)模式中的適配器模式與橋接模式,結(jié)構(gòu)型設(shè)計(jì)模式是從程序的結(jié)構(gòu)上解決模塊之間的耦合問(wèn)題,需要的朋友可以參考下2016-02-02
spring異步service中處理線程數(shù)限制詳解
這篇文章主要給大家介紹了關(guān)于spring異步service中處理線程數(shù)限制的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spring具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Java集合中的CopyOnWriteArrayList使用詳解
這篇文章主要介紹了Java集合中的CopyOnWriteArrayList使用詳解,CopyOnWriteArrayList是ArrayList的線程安全版本,從他的名字可以推測(cè),CopyOnWriteArrayList是在有寫(xiě)操作的時(shí)候會(huì)copy一份數(shù)據(jù),然后寫(xiě)完再設(shè)置成新的數(shù)據(jù),需要的朋友可以參考下2023-12-12
基于Java并發(fā)容器ConcurrentHashMap#put方法解析
下面小編就為大家?guī)?lái)一篇基于Java并發(fā)容器ConcurrentHashMap#put方法解析。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
深入了解JAVA數(shù)據(jù)類型與運(yùn)算符
這篇文章主要介紹了Java基本數(shù)據(jù)類型和運(yùn)算符,結(jié)合實(shí)例形式詳細(xì)分析了java基本數(shù)據(jù)類型、數(shù)據(jù)類型轉(zhuǎn)換、算術(shù)運(yùn)算符、邏輯運(yùn)算符等相關(guān)原理與操作技巧,需要的朋友可以參考下2021-07-07
Java 中使用Spring Security的實(shí)例詳解
Spring Security是一款強(qiáng)大的安全框架,可以幫助用戶保護(hù)Web應(yīng)用程序和REST API的安全性,這篇文章主要介紹了Java 中如何使用Spring Security,需要的朋友可以參考下2023-06-06

