国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java編程中隨機數的生成方式總結

2019-11-26 14:16:40
字體:
來源:轉載
供稿:網友

本章先講解Java隨機數的幾種產生方式,然后通過示例對其進行演示。
廣義上講,Java中的隨機數的有三種產生方式:
(01). 通過System.currentTimeMillis()來獲取一個當前時間毫秒數的long型數字。
(02). 通過Math.random()返回一個0到1之間的double值。
(03). 通過Random類來產生一個隨機數,這個是專業的Random工具類,功能強大。第1種 利用System.currentTimeMillis()獲取隨機數
通過System.currentTimeMillis()來獲取隨機數。實際上是獲取當前時間毫秒數,它是long類型。使用方法如下:

final long l = System.currentTimeMillis();

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

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

第2種 利用Math.random()獲取隨機數
通過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);

第3種 利用Random類來獲取隨機數
通過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 種子設置此隨機數生成器的種子。

獲取隨機數示例

eg1:
下面通過示例演示上面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的API    testRandomAPIs(new Random(1000), " 1st Random(1000)");    testRandomAPIs(new Random(1000), " 2nd Random(1000)");    // 新建“默認種子”的Random對象,并通過該種子去測試Random的API    testRandomAPIs(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("]");  }}

eg2:

問題:生成(-10,10)之間的保留小數點后兩位數的隨機數。
解決方法:
1.java中隨機數生成函數Random r=new Random(); r.nextFloat();//生成(0,1)之間的浮點型隨機數。將上述隨機數乘以10,得到生成(0,10)之間的隨機數。
2.生成一個Boolean型的隨機數用于控制數的正負:r.nextBoolean();
3.保留小數位數兩位的方法:Math.floor(n*100+0.5)/100;得到的數為double型。
代碼如下:
  

import java.util.*;  public class CreateRandom {   public float numRandom(){    float num;    Random r=new Random();    float value = (float) (Math.floor(r.nextFloat()*1000+0.5)/100);    Boolean b = r.nextBoolean();    if(b){     num = value;     }    else{     num=0-value;     }    return num;    }    public static void main(String[] args) {     CreateRandom cr = new CreateRandom();     float num = cr.numRandom();     System.out.print(num);    }  }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昌乐县| 台江县| 油尖旺区| 张家港市| 漳平市| 洱源县| 乌拉特中旗| 栾川县| 韶关市| 安龙县| 彭州市| 贡嘎县| 巴彦淖尔市| 旅游| 三原县| 海安县| 九台市| 曲靖市| 垦利县| 赤城县| 万盛区| 邳州市| 兴仁县| 阿合奇县| 临桂县| 芷江| 莫力| 西城区| 彩票| 杭锦后旗| 嘉祥县| 贵港市| 汶上县| 临沂市| 望江县| 林口县| 曲周县| 彰化市| 万州区| 牙克石市| 汨罗市|