Java創建隨機數的四種方式總結

第一次接觸到隨機數還是在c語言裡面 使用的是 rand(); 但是重新執行一次的時候會發現,誒,居然和上一次執行的結果是一樣的,因為沒有初始化種子,所以系統用的都是統一的種子這時就會出現每次產生的隨機數都一樣,這時就會使用到 srand();這個隨機數的發生器, 把種子給定當前的時間 即 srand((unsigned) time (&t)); 我c語言常用的隨機數函數如下:

c語言隨機數

#include <stdio.h>

int main(void) {

	int left,right;
	printf("請輸入一個數:");
	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中的四種創建隨機數的方法

java

以下代碼都是以a ~ b 之間 求出一個隨機整數

1.Random

創建對象

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

創建對象

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

創建對象

ThreadLocalRandom tra = ThreadLocalRandom.current();

求出隨機數的左值和右值

int right = (Math.max(a,b)) ;
int left = (Math.min(a,b);

int nu = (tra .nextInt(right) + left );

取值范圍 left 最小值 right 最大值

4.Math.Random

由於 Math 裡面的方法是靜態的所以可以直接 類名.方法名 使用

int number = (int)(a + Math.random()*(b-a+1)) //返回一個int類型的參數 所以用 int 接收

范圍 a <= 隨機數 < (b -a +1)

2 <= 隨機數 < (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) {
        //用戶輸入兩個數, 然後程序取這兩個數裡面的其中隨機一個數
        Scanner input =  new Scanner(System.in);
        System.out.print("請輸入兩個數:");
        int a = input.nextInt();
        int b = input.nextInt();

        // 取值范圍   left 最小值    right 最大值
        int right = Math.max(a,b);
        int left = Math.min(a,b);
        int nu;

        //四種生成隨機數的方法

        //第一種
        Random ra = new Random();
             while( true){
            nu =(ra.nextInt(right) + left ) ;
            System.out.println(nu);

            //找到最大隨機整數 輸出並結束
            if(nu == right) {

                System.out.println(nu);
                return;
            }
        }

        //第二種
/*
        SecureRandom sra = new SecureRandom();

        while(true){
            nu =(sra.nextInt(right) + left ) ;
            System.out.println(nu);

            //找到最大隨機整數 輸出並結束
            if(nu == right) {
                System.out.println(nu);
                return;
            }
        }*/


        //第三種  在多線程的時候使用 是最佳的; 因為它會為每個線程都 使用不同的種子
       /* ThreadLocalRandom tra =  ThreadLocalRandom.current();
        while(true){
            nu =(tra.nextInt(right) + left ) ;
            System.out.println(nu);

            //找到最大隨機整數 輸出並結束
            if(nu == right) {
                System.out.println(nu);
                return;
            }
        }*/

      /*  //第四種
         int value = (int)(a + Math.random()*(b-a+1));
        System.out.println(value);
*/


    }

}

到此這篇關於Java創建隨機數的四種方式總結的文章就介紹到這瞭,更多相關Java創建隨機數內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: