Java創(chuàng)建隨機數(shù)的四種方式總結(jié)
第一次接觸到隨機數(shù)還是在c語言里面 使用的是 rand(); 但是重新執(zhí)行一次的時候會發(fā)現(xiàn),誒,居然和上一次執(zhí)行的結(jié)果是一樣的,因為沒有初始化種子,所以系統(tǒng)用的都是統(tǒng)一的種子這時就會出現(xiàn)每次產(chǎn)生的隨機數(shù)都一樣,這時就會使用到 srand();這個隨機數(shù)的發(fā)生器, 把種子給定當前的時間 即 srand((unsigned) time (&t)); 我c語言常用的隨機數(shù)函數(shù)如下:
c語言隨機數(shù)
#include <stdio.h>
int main(void) {
int left,right;
printf("請輸入一個數(shù):");
scanf_s("%d%d",&left,&right);
//srand((unsigned)time(NULL));
//for(int i = 0; i<10; i++)
//printf("%d\n",rand() % one);
//改進
for (int i = 0; i < 10; i++)
printf("隨機值如下:%d\n", srandNext(left, right));
return 0;
}
/********************************************************************************
* @Function: srandNext
* @Description:Find a random integer from min to max
* @Author: caiziqi
* @Version: 1.1
* @formal parameter:min : is the minimum value of the value range of this random number function, max: is the maximum value range of this random number function
* @Date: 2022-7-26
* @Return : returns a random integer
********************************************************************************/
int srandNext(int max,int min) {
//To prevent users from passing parameters incorrectly
if (max <= min) {
if (max == min) {
return max;
}
int temp = max;
max = min;
min = temp;
}
unsigned int static seed = 0;
seed++;
srand((unsigned)time(NULL) + seed * seed);
return rand() % (max - min + 1) + min;
}
當然這不是最主要的今天是要講我學到的java中的四種創(chuàng)建隨機數(shù)的方法
java
以下代碼都是以a ~ b 之間 求出一個隨機整數(shù)
1.Random
創(chuàng)建對象
Random ra = new Random(); int right = (Math.max(a,b)) ; int left = (Math.min(a,b); int nu = (ra.nextInt(right) + left );
取值范圍 left 最小值 right 最大值
2.SecureRandom
創(chuàng)建對象
SecureRandom sra = new SecureRandom(); int right = (Math.max(a,b)) ; int left = (Math.min(a,b); int nu = (sra .nextInt(right) + left );
取值范圍 left 最小值 right 最大值
3.ThreadLocalRandom
創(chuàng)建對象
ThreadLocalRandom tra = ThreadLocalRandom.current();
求出隨機數(shù)的左值和右值
int right = (Math.max(a,b)) ; int left = (Math.min(a,b); int nu = (tra .nextInt(right) + left );
取值范圍 left 最小值 right 最大值
4.Math.Random
由于 Math 里面的方法是靜態(tài)的所以可以直接 類名.方法名 使用
int number = (int)(a + Math.random()*(b-a+1)) //返回一個int類型的參數(shù) 所以用 int 接收
范圍 a <= 隨機數(shù) < (b -a +1)
2 <= 隨機數(shù) < (4 -2 +1 )
完整代碼
import java.security.SecureRandom;
import java.util.Random;
import java.util.Scanner;
import java.util.concurrent.ThreadLocalRandom;
public class FourWaysOfRandomNumbers {
public static void main(String[] args) {
//用戶輸入兩個數(shù), 然后程序取這兩個數(shù)里面的其中隨機一個數(shù)
Scanner input = new Scanner(System.in);
System.out.print("請輸入兩個數(shù):");
int a = input.nextInt();
int b = input.nextInt();
// 取值范圍 left 最小值 right 最大值
int right = Math.max(a,b);
int left = Math.min(a,b);
int nu;
//四種生成隨機數(shù)的方法
//第一種
Random ra = new Random();
while( true){
nu =(ra.nextInt(right) + left ) ;
System.out.println(nu);
//找到最大隨機整數(shù) 輸出并結(jié)束
if(nu == right) {
System.out.println(nu);
return;
}
}
//第二種
/*
SecureRandom sra = new SecureRandom();
while(true){
nu =(sra.nextInt(right) + left ) ;
System.out.println(nu);
//找到最大隨機整數(shù) 輸出并結(jié)束
if(nu == right) {
System.out.println(nu);
return;
}
}*/
//第三種 在多線程的時候使用 是最佳的; 因為它會為每個線程都 使用不同的種子
/* ThreadLocalRandom tra = ThreadLocalRandom.current();
while(true){
nu =(tra.nextInt(right) + left ) ;
System.out.println(nu);
//找到最大隨機整數(shù) 輸出并結(jié)束
if(nu == right) {
System.out.println(nu);
return;
}
}*/
/* //第四種
int value = (int)(a + Math.random()*(b-a+1));
System.out.println(value);
*/
}
}到此這篇關(guān)于Java創(chuàng)建隨機數(shù)的四種方式總結(jié)的文章就介紹到這了,更多相關(guān)Java創(chuàng)建隨機數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java異步調(diào)用轉(zhuǎn)同步方法實例詳解
這篇文章主要介紹了Java異步調(diào)用轉(zhuǎn)同步方法實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06
springBoot整合shiro如何解決讀取不到@value值問題
這篇文章主要介紹了springBoot整合shiro如何解決讀取不到@value值問題,具有很好的參考價值,希望對大家有所幫助,2023-08-08
Java中常見延時隊列的實現(xiàn)方案小結(jié)(建議收藏)
延時隊列它要具有隊列的特性,再給它附加一個延遲消費隊列消息的功能,也就是說可以指定隊列中的消息在哪個時間點被消費,這篇文章主要介紹了Java中常見延時隊列的實現(xiàn)方案總結(jié),需要的朋友可以參考下2024-04-04
IDEA安裝lombok插件設置Enable Annotation Processing后編譯依然報錯解決方法
這篇文章主要介紹了IDEA安裝lombok插件設置Enable Annotation Processing后編譯依然報錯解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-04-04

