亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java生成指定范圍隨機數的多種代碼

 更新時間:2017年08月15日 16:24:15   投稿:mdxy-dxy  
今天在寫代碼的時候需要用到一個生成指定范圍隨機數的函數,百度了一下,發(fā)現了很多種方法,這里簡單為大家整理一下,方便需要的朋友

生成指定范圍內的隨機數這個是最常用的技術之一,程序員希望通過隨機數的方式來處理眾多的業(yè)務邏輯,測試過程中也希望通過隨機數的方式生成包含大量數字的測試用例。

問題往往類似于:

如何隨機生成 1~100 之間的隨機數,取值包含邊界值 1 和 100。

或者是:

如何隨機生成隨機的3位整數?

等等……

以 Java 語言為例,我們觀察其 Random 對象的 nextInt(int) 方法,發(fā)現這個方法將生成 0 ~ 參數之間隨機取值的整數。例如(假設先有 Random rand = newRandom();,下同):

rand.nextInt(100);

這行代碼將生成范圍0~100 之間的隨機數,有趣的是,取值可能為 0 ,但不可能為 100。我們用中學數學課學習的區(qū)間表示法,表示為:[0, 100)。

那么如果要獲得區(qū)間 [1~100]的隨機數,該怎么辦呢?稍微動動腦筋就可以想到:區(qū)間 [0, 100) 內的整數,實際上就是區(qū)間 [0, 99]。因為最大邊界為100,可惜不能等于100,因此最大可能產生的“整數”就是99。

既然rand.nextInt(100) 獲得的值是區(qū)間 [0, 99],那么在這個區(qū)間左右各加 1,就得到了區(qū)間 [1, 100]。因此,代碼寫成:

rand.nextInt(100)+ 1;

即可。運行下面的代碼,將獲得 [1, 100] 的 10 個取值。

import java.util.Random; 
public class Test { 
 public static void main(String[] args){ 
 Random rand = new Random(); 
 for(int i=0; i<10; i++) { 
 System.out.println(rand.nextInt(100) + 1); 
 } 
 } 
} 

同理,很容易知道如果要獲得隨機兩位整數,代碼寫成:rand.nextInt(90) + 10;

你一定很驚訝,為什么是這么寫出來的。其實,在 nextInt() 方法中作為參數的數字 90 表示:你希望生成的隨機數的所有取值的可能性的數量(在本命題中,兩位整數取值為 [10, 99],共90個數);加好后面的數字 10 ,表示區(qū)間的最小取值。

你可以驗證下,按照這樣理解,[1, 100] 的隨機數,是不是應該寫成rand.nextInt(100) + 1 。千萬不要把參數 100 理解為最大取值。只是區(qū)間 [1, 100] 正好從 1 開始,所以最大取值和取值可能性數量正好同為 100。

因此,

生成隨機三位數的代碼為:

rand.nextInt(900)+ 100;

生成區(qū)間 [64,128] 中隨機值的代碼為:

rand.nextInt(65)+ 64;

取值可能性的數量是如何計算出來的呢?當然是 最大取值-最小取值+1 ,所以,有最終公式如下:

// For Java

int randNumber =rand.nextInt(MAX - MIN + 1) + MIN; // randNumber 將被賦值為一個 MIN 和 MAX 范圍內的隨機數

下面腳本之家小編分享一個網上常用的函數

函數一、要生成在[min,max]之間的隨機整數

import java.util.Random;

public class RandomTest {
	public static void main(String[] args) {
		int max=20;
		int min=10;
		Random random = new Random();

		int s = random.nextInt(max)%(max-min+1) + min;
		System.out.println(s);
	}
}

random.nextInt(max)表示生成[0,max]之間的隨機數,然后對(max-min+1)取模。

以生成[10,20]隨機數為例,首先生成0-20的隨機數,然后對(20-10+1)取模得到[0-10]之間的隨機數,然后加上min=10,最后生成的是10-20的隨機數

函數二、

import java.util.*;
import java.io.*;

public class Random_Different {
	public static void main(String[] args) throws IOException{
		System.out.print("輸入產生的隨機數范圍,1到N,N=");
		int n=0;
		try{
			n=Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine());
		}catch(Exception e){
			System.out.println("N必須為正整數");
			return;
		}
		if(n<1){
			System.out.println("N必須為正數");
			return;
		}
		int randArr[]=new int[n];
		int i=0;
		while(i<n){
			int rand=(new Random().nextInt(n)+1);
			boolean isRandExist=false;
			for(int j=0;j<randArr.length;j++){
				if(randArr[j]==rand){
					isRandExist=true;
					break;
				}
			}
			if(isRandExist==false){
				randArr[i]=rand;
				i++;
			}			
		}
		System.out.println(Arrays.toString(randArr));
	}
}

首先在1~n產生一個隨機數X,然后對這個之前產生的數據進行遍歷,判斷是否存在有數等于這個新產生的隨機數的,如果有,立flag,

然后對之前的數據遍歷完畢之后,判斷flag是否立起來,

如果是,就不添加這個隨機數進數組,重新產生隨機數并收起flag,再重新遍歷已有的數據中是否已有這個隨機數,

如果否,就添加,直到n個數據產生完畢。

最后輸出這個n個數據。

具體的運行效果如下:

為了說明這個程序是健壯的,讓電腦輸入N,其中這個N從1-20,可以觀察到,輸出的數組中沒有一個數是相同的,完成任務!

更多的數也是沒有問題的,你設置N=二十萬,都沒有問題,這里由于本猿猴的機器太渣,設置個N=33說明效果。

相關文章

  • Java操作mongodb增刪改查的基本操作實戰(zhàn)指南

    Java操作mongodb增刪改查的基本操作實戰(zhàn)指南

    MongoDB是一個基于分布式文件存儲的數據庫,由c++語言編寫,旨在為WEB應用提供可擴展的高性能數據存儲解決方案,下面這篇文章主要給大家介紹了關于Java操作mongodb增刪改查的基本操作實戰(zhàn)指南,需要的朋友可以參考下
    2023-05-05
  • Java單元測試Mockito的使用詳解

    Java單元測試Mockito的使用詳解

    Mockito是一個強大的mock工具,本文將重點講述Mockito的基本使用及注意事項,以及Controller測試用例,本文通過示例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2021-07-07
  • 關于Springboot數據庫配置文件明文密碼加密解密的問題

    關于Springboot數據庫配置文件明文密碼加密解密的問題

    這篇文章主要介紹了Springboot數據庫配置文件明文密碼加密解密的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • SpringBoot使用iText7實現將HTML轉成PDF并添加頁眉頁腳水印

    SpringBoot使用iText7實現將HTML轉成PDF并添加頁眉頁腳水印

    這篇文章主要為大家詳細介紹了SpringBoot使用iText7實現將HTML轉成PDF并添加頁眉頁腳水印的相關知識,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03
  • java高并發(fā)情況下高效的隨機數生成器

    java高并發(fā)情況下高效的隨機數生成器

    這篇文章主要介紹了java高并發(fā)情況下高效的隨機數生成器,對于性能有要求的同學,可以參考下
    2021-04-04
  • Java阻塞隊列的實現及應用

    Java阻塞隊列的實現及應用

    這篇文章主要介紹了剖析Java中阻塞隊列的實現原理及應用場景,這里也對阻塞和非阻塞隊列的不同之處進行了對比,需要的朋友可以參考下
    2021-10-10
  • springboot項目以jar包運行的操作方法

    springboot項目以jar包運行的操作方法

    公司一個springboot項目本來是打war包的,突然要改為打jar包,不知所措了,糾結該如何操作呢,折騰半天終于搞定了,下面把解決方案分享給大家,對springboot打jar包方式感興趣的朋友一起看看吧
    2021-06-06
  • SpringBoot三種方法接口返回日期格式化小結

    SpringBoot三種方法接口返回日期格式化小結

    本文介紹了三種在Spring Boot中格式化接口返回日期的方法,包含使用@JsonFormat注解、全局配置JsonConfig、以及在yml文件中配置時區(qū),具有一定的參考價值,感興趣的可以了解一下
    2025-01-01
  • SpringBoot整合mybatis的方法詳解

    SpringBoot整合mybatis的方法詳解

    這篇文章主要為大家詳細介紹了SpringBoot整合mybatis的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Java實現簡單的郵件發(fā)送功能

    Java實現簡單的郵件發(fā)送功能

    這篇文章主要為大家詳細介紹了Java實現簡單的郵件發(fā)送功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07

最新評論