(轉)Java隨機數

1 隨機數的三種產生方式

本章先講解Java隨機數的幾種產生方式,然后通過示例對其進行演示。

廣義上講,Java中的隨機數的有三種產生方式

(01). 通過System.currentTimeMillis()來獲取一個當前時間毫秒數的long型數字。
(02). 通過Math.random()返回一個0到1之間的double值。
(03). 通過Random類來產生一個隨機數,這個是專業的Random工具類,功能強大。

1.1 第1種


通過System.currentTimeMillis()來獲取隨機數。實際上是獲取當前時間毫秒數,它是long類型。使用方法如下:

final long l = System.currentTimeMillis();

?

若要獲取int類型的整數,只需要將上面的結果轉行成int類型即可。比如,獲取[0, 100)之間的int整數。方法如下:

final long l = System.currentTimeMillis();
final int i = (int)( l % 100 );

1.2 第2種


通過Math.random()來獲取隨機數。實際上,它返回的是0(包含)到1(不包含)之間的double值。使用方法如下:

final double d = Math.random();

若要獲取int類型的整數,只需要將上面的結果轉行成int類型即可。比如,獲取[0, 100)之間的int整數。方法如下:

final double d = Math.random();
final int i = (int)(d*100);

1.3 第3種


通過Random類來獲取隨機數。

使用方法如下:
(01)?創建Random對象。有兩種方法可以創建Random對象,如下:

Random random = new Random();//默認構造方法
Random random = new Random(1000);//指定種子數字

02)?通過Random對象獲取隨機數。Random支持的隨機值類型包括:boolean, byte, int, long, float, double。
比如,獲取[0, 100)之間的int整數。方法如下

int i2 = random.nextInt(100);

Random 的函數接口

// 構造函數(一): 創建一個新的隨機數生成器。 
Random() 
// 構造函數(二): 使用單個 long 種子創建一個新隨機數生成器: public Random(long seed) { setSeed(seed); } next 方法使用它來保存隨機數生成器的狀態。
Random(long seed) boolean nextBoolean()         // 返回下一個“boolean類型”偽隨機數。 
void    nextBytes(byte[] buf) // 生成隨機字節并將其置于字節數組buf中。 
double  nextDouble()          // 返回一個“[0.0, 1.0) 之間的double類型”的隨機數。 
float   nextFloat()           // 返回一個“[0.0, 1.0) 之間的float類型”的隨機數。 
int     nextInt()             // 返回下一個“int類型”隨機數。 
int     nextInt(int n)        // 返回一個“[0, n) 之間的int類型”的隨機數。 
long    nextLong()            // 返回下一個“long類型”隨機數。 
synchronized double nextGaussian()   // 返回下一個“double類型”的隨機數,它是呈高斯(“正常地”)分布的 double 值,其平均值是 0.0,標準偏差是 1.0。 
synchronized void setSeed(long seed) // 使用單個 long 種子設置此隨機數生成器的種子。

1.4 獲取隨機數示例


下面通過示例演示上面3種獲取隨機數的使用方法。
源碼如下(RandomTest.java):

import java.util.Random;
import java.lang.Math;/*** java 的隨機數測試程序。共3種獲取隨機數的方法:*   (01)、通過System.currentTimeMillis()來獲取一個當前時間毫秒數的long型數字。*   (02)、通過Math.random()返回一個0到1之間的double值。*   (03)、通過Random類來產生一個隨機數,這個是專業的Random工具類,功能強大。** @author skywang* @email kuiwu-wang@163.com*/
public class RandomTest{public static void main(String args[]){// 通過System的currentTimeMillis()返回隨機數
        testSystemTimeMillis();// 通過Math的random()返回隨機數
        testMathRandom();// 新建“種子為1000”的Random對象,并通過該種子去測試Random的APItestRandomAPIs(new Random(1000), " 1st Random(1000)");testRandomAPIs(new Random(1000), " 2nd Random(1000)");// 新建“默認種子”的Random對象,并通過該種子去測試Random的APItestRandomAPIs(new Random(), " 1st Random()");testRandomAPIs(new Random(), " 2nd Random()");}/*** 返回隨機數-01:測試System的currentTimeMillis()*/private static void testSystemTimeMillis() {// 通過final long l = System.currentTimeMillis();// 通過l獲取一個[0, 100)之間的整數final int i = (int)( l % 100 );System.out.printf("\n---- System.currentTimeMillis() ----\n l=%s i=%s\n", l, i);}/*** 返回隨機數-02:測試Math的random()*/private static void testMathRandom() {// 通過Math的random()函數返回一個double類型隨機數,范圍[0.0, 1.0)final double d = Math.random();// 通過d獲取一個[0, 100)之間的整數final int i = (int)(d*100);System.out.printf("\n---- Math.random() ----\n d=%s i=%s\n", d, i);}/*** 返回隨機數-03:測試Random的API*/private static void testRandomAPIs(Random random, String title) {final int BUFFER_LEN = 5;// 獲取隨機的boolean值boolean b = random.nextBoolean();// 獲取隨機的數組buf[]byte[] buf = new byte[BUFFER_LEN];random.nextBytes(buf);// 獲取隨機的Double值,范圍[0.0, 1.0)double d = random.nextDouble();// 獲取隨機的float值,范圍[0.0, 1.0)float f = random.nextFloat();// 獲取隨機的int值int i1 = random.nextInt();// 獲取隨機的[0,100)之間的int值int i2 = random.nextInt(100);// 獲取隨機的高斯分布的double值double g = random.nextGaussian();// 獲取隨機的long值long l = random.nextLong();System.out.printf("\n---- %s ----\nb=%s, d=%s, f=%s, i1=%s, i2=%s, g=%s, l=%s, buf=[",title, b, d, f, i1, i2, g, l);for (byte bt:buf) System.out.printf("%s, ", bt);System.out.println("]");}
}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394147.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394147.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394147.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode105. 從前序與中序遍歷序列構造二叉樹(遞歸)

根據一棵樹的前序遍歷與中序遍歷構造二叉樹。注意: 你可以假設樹中沒有重復的元素。例如,給出前序遍歷 preorder [3,9,20,15,7] 中序遍歷 inorder [9,3,15,20,7] 返回如下的二叉樹:3/ \9 20/ \15 7代碼 /*** Definition for a binary tree node.*…

途虎養車三個創始人_3個來自非常規創始人的獲獎技術和產品見解

途虎養車三個創始人by Henry通過亨利 3個來自非常規創始人的獲獎技術和產品見解 (3 Winning Technology & Product Insights from WeChat’s unconventional founder) Intro: The writer is a current PMLinkedIn. Formerly he worked as a growth engineer Facebook. he …

Powershell-創建Module

1.找到默認module路徑,ISE啟動時自動加載默認領下的Module代碼。 $env:PSModulePath 2.在其中一個默認路徑下創建個文件夾,在文件夾下創建一個.psm1后綴文件,注意文件夾名字與文件名一樣。 3.在.psm1文件中寫入函數代碼。 4.重啟ISE自動加載m…

android是java_為什么大家都用JAVA寫android程序

您好,1、原始類型:v void 只能用于返回值類型Z booleanB byteS shortC charI intJ long(64位)F floatD double(64位)對象類型:Lpackage/name/ObjectName相當于java中的package.name.ObjectName解釋如下:L:表示這是一個…

preserve log什么意思_一些有意思的JavaScript代碼片段

Javascript是一門很靈活的語言,我們可以使用它動態地實現各種各樣的功能。但是動態帶來便利的同時,也存在一些令人費解的行為,稍不注意就會進入誤區一個接著一個的坑。雖然我使用JavaScript的時間還不算長,也是遇到了一些有意思的…

快速排序——Java

快排的思想想必大家都懂,前后兩個指針,向中間靠攏。我這個partition函數能保證所有相同的數都被比較一次,靠攏在一起。 代碼: public class Main { public static int[] partition1(int[] arr, int begin, int end, int pivotVal…

預處理器sass_Sass — Web的預處理器裝飾

預處理器sass美學的重要性,其影響以及實現這一目標的工具。 (Importance of aesthetics, its impact, and tool to achieve it.) I remember as a child, every time I’d walk up to a bakery, I’d choose the pastries with the most beautiful toppings. Only a…

leetcode971. 翻轉二叉樹以匹配先序遍歷(dfs)

給定一個有 N 個節點的二叉樹,每個節點都有一個不同于其他節點且處于 {1, …, N} 中的值。 通過交換節點的左子節點和右子節點,可以翻轉該二叉樹中的節點。 考慮從根節點開始的先序遍歷報告的 N 值序列。將這一 N 值序列稱為樹的行程。 (回…

【BZOJ3932】[CQOI2015]任務查詢系統 主席樹

【BZOJ3932】[CQOI2015]任務查詢系統 Description 最近實驗室正在為其管理的超級計算機編制一套任務管理系統,而你被安排完成其中的查詢部分。超級計算機中的任務用三元組(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任務從第Si秒開始,在第Ei秒后結束&…

沖刺第一天

任務板 未開始 進行中已完成 劉曉杰:找回密碼界面 頁面風格優化 劉曉杰:滑動歡迎界面/加載界面 預計時間:5.5h 馮晨:找回密碼功能 發布動態界面 馮晨&#xff…

杭電1003 java_杭電ACM1003題怎么理解?

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓http://acm.hdu.edu.cn/showproblem.php?pid1003Max SumTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 99208 Accepted Submission(s): 22835Problem DescriptionGiven…

ubtunu打開firefox_如何在Firefox(在Lubuntu中)中打開“apt”鏈接?

問題描述Ask Ubuntu上的許多答案都直接指向在Ubuntu軟件中心中在Xubuntu中打開的this之類的鏈接。在Lubuntu中,我收到此錯誤消息:在Firefox-Preferences中,應用程序看不到類似于apt的東西來關聯程序等。在Chromium或Opera中打開相同的鏈接&am…

web api json_有關使用JSON Web令牌保護無服務器API的速成班

web api jsonWhat a mouthful of a title. Wouldn’t you agree? In this walkthrough you’ll learn about securing your Serverless endpoints with JSON web tokens.這么大的頭銜。 你不同意嗎? 在本演練中,您將學習如何使用JSON Web令牌保護無服務…

【python之路14】發送郵件實例

1、發郵件的代碼 from email.mime.text import MIMETextfrom email.utils import formataddrimport smtplibmsg MIMEText(郵件內容,plain,utf-8)msg[from] formataddr([sunshuhai,25193qq.com])msg[to] formataddr([走人,252222222qq.com])msg[Subject] 主題server smtpli…

蘋果內存取證工具volafox

2019獨角獸企業重金招聘Python工程師標準>>> 蘋果內存取證工具volafox volafox是一款針對蘋果內存取證的專用工具。該工具使用Python語言編寫。該工具內置了overlay data數據,用戶可以直接分析蘋果10.6-10.11的各種內存鏡像文件。該工具提供28個子命令&a…

leetcode513. 找樹左下角的值(dfs)

給定一個二叉樹,在樹的最后一行找到最左邊的值。 代碼 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val x; }* }*/ class Solution {int maxL0,maxN0;pu…

Flutter實戰視頻-移動電商-45.詳細頁_說明區域UI編寫

45.詳細頁_說明區域UI編寫 pages/details_page/details_expain.dart 詳情頁面引用組件 效果展示: 最終代碼: import package:flutter/material.dart; import package:flutter_screenutil/flutter_screenutil.dart;class DetailsExplain extends Stateles…

win10java怎么運行_win10系統電腦怎樣才可以運行Java開發

展開全部安裝jdk,jdk下載地址:網頁鏈接 根據電腦系統選擇對應版本。32/64安裝時候,安裝路徑可以默認,也可以自己指定。我個人喜歡安裝到非系統盤,比如D盤。jdk安裝后,會彈出jre安裝界面,路徑同樣…

HTTP服務器的本質:tinyhttpd源碼分析及拓展

已經有一個月沒有更新博客了,一方面是因為平時太忙了,另一方面是想積攢一些干貨進行分享。最近主要是做了一些開源項目的源碼分析工作,有c項目也有python項目,想提升一下內功,今天分享一下tinyhttpd源碼分析的成果。ti…

monthdiff oracle_Oracle計算時間差函數

1、months_between(date1,date2) 返回兩個日期之間的月份的差值(1)、如果兩個日期月份內天數相同,或者都是某個月的最后一天,返回一個整數。否則,返回數值帶小數select months_between(sysdate,addtime)as diff_month from test62、interval 時間間隔…