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

Java編程中隨機(jī)數(shù)的生成方式總結(jié)

 更新時(shí)間:2016年05月30日 09:00:23   作者:skywang  
在Java中利用自帶的類庫(kù)可以有三種途徑可以產(chǎn)生隨機(jī)數(shù),這里我們舉了一些簡(jiǎn)單的例子來(lái)進(jìn)行Java編程中隨機(jī)數(shù)的生成方式總結(jié),需要的朋友可以參考下

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

final long l = System.currentTimeMillis();

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

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

第2種 利用Math.random()獲取隨機(jī)數(shù)
通過(guò)Math.random()來(lái)獲取隨機(jī)數(shù)。實(shí)際上,它返回的是0(包含)到1(不包含)之間的double值。使用方法如下:

final double d = Math.random();

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

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

第3種 利用Random類來(lái)獲取隨機(jī)數(shù)
通過(guò)Random類來(lái)獲取隨機(jī)數(shù)。
使用方法如下:
(01) 創(chuàng)建Random對(duì)象。有兩種方法可以創(chuàng)建Random對(duì)象,如下:

Random random = new Random();//默認(rèn)構(gòu)造方法
Random random = new Random(1000);//指定種子數(shù)字

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

int i2 = random.nextInt(100);

Random 的函數(shù)接口

// 構(gòu)造函數(shù)(一): 創(chuàng)建一個(gè)新的隨機(jī)數(shù)生成器。 


Random() 
// 構(gòu)造函數(shù)(二): 使用單個(gè) long 種子創(chuàng)建一個(gè)新隨機(jī)數(shù)生成器: public Random(long seed) { setSeed(seed); } next 方法使用它來(lái)保存隨機(jī)數(shù)生成器的狀態(tài)。
Random(long seed) 

boolean nextBoolean()     // 返回下一個(gè)“boolean類型”偽隨機(jī)數(shù)。 
void  nextBytes(byte[] buf) // 生成隨機(jī)字節(jié)并將其置于字節(jié)數(shù)組buf中。 
double nextDouble()     // 返回一個(gè)“[0.0, 1.0) 之間的double類型”的隨機(jī)數(shù)。 
float  nextFloat()      // 返回一個(gè)“[0.0, 1.0) 之間的float類型”的隨機(jī)數(shù)。 
int   nextInt()       // 返回下一個(gè)“int類型”隨機(jī)數(shù)。 
int   nextInt(int n)    // 返回一個(gè)“[0, n) 之間的int類型”的隨機(jī)數(shù)。 
long  nextLong()      // 返回下一個(gè)“l(fā)ong類型”隨機(jī)數(shù)。 



synchronized double nextGaussian()  // 返回下一個(gè)“double類型”的隨機(jī)數(shù),它是呈高斯(“正常地”)分布的 double 值,其平均值是 0.0,標(biāo)準(zhǔn)偏差是 1.0。 
synchronized void setSeed(long seed) // 使用單個(gè) long 種子設(shè)置此隨機(jī)數(shù)生成器的種子。


獲取隨機(jī)數(shù)示例

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

import java.util.Random;
import java.lang.Math;

/**
 * java 的隨機(jī)數(shù)測(cè)試程序。共3種獲取隨機(jī)數(shù)的方法:
 *  (01)、通過(guò)System.currentTimeMillis()來(lái)獲取一個(gè)當(dāng)前時(shí)間毫秒數(shù)的long型數(shù)字。
 *  (02)、通過(guò)Math.random()返回一個(gè)0到1之間的double值。
 *  (03)、通過(guò)Random類來(lái)產(chǎn)生一個(gè)隨機(jī)數(shù),這個(gè)是專業(yè)的Random工具類,功能強(qiáng)大。
 *
 * @author skywang
 * @email kuiwu-wang@163.com
 */
public class RandomTest{

  public static void main(String args[]){

    // 通過(guò)System的currentTimeMillis()返回隨機(jī)數(shù)
    testSystemTimeMillis();

    // 通過(guò)Math的random()返回隨機(jī)數(shù)
    testMathRandom();

    // 新建“種子為1000”的Random對(duì)象,并通過(guò)該種子去測(cè)試Random的API
    testRandomAPIs(new Random(1000), " 1st Random(1000)");
    testRandomAPIs(new Random(1000), " 2nd Random(1000)");
    // 新建“默認(rèn)種子”的Random對(duì)象,并通過(guò)該種子去測(cè)試Random的API
    testRandomAPIs(new Random(), " 1st Random()");
    testRandomAPIs(new Random(), " 2nd Random()");
  }

  /**
   * 返回隨機(jī)數(shù)-01:測(cè)試System的currentTimeMillis()
   */
  private static void testSystemTimeMillis() {
    // 通過(guò)
    final long l = System.currentTimeMillis();
    // 通過(guò)l獲取一個(gè)[0, 100)之間的整數(shù)
    final int i = (int)( l % 100 );

    System.out.printf("\n---- System.currentTimeMillis() ----\n l=%s i=%s\n", l, i);
  }


  /**
   * 返回隨機(jī)數(shù)-02:測(cè)試Math的random()
   */
  private static void testMathRandom() {
    // 通過(guò)Math的random()函數(shù)返回一個(gè)double類型隨機(jī)數(shù),范圍[0.0, 1.0)
    final double d = Math.random();
    // 通過(guò)d獲取一個(gè)[0, 100)之間的整數(shù)
    final int i = (int)(d*100);

    System.out.printf("\n---- Math.random() ----\n d=%s i=%s\n", d, i);
  }


  /**
   * 返回隨機(jī)數(shù)-03:測(cè)試Random的API
   */
  private static void testRandomAPIs(Random random, String title) {
    final int BUFFER_LEN = 5;

    // 獲取隨機(jī)的boolean值
    boolean b = random.nextBoolean();
    // 獲取隨機(jī)的數(shù)組buf[]
    byte[] buf = new byte[BUFFER_LEN];
    random.nextBytes(buf);
    // 獲取隨機(jī)的Double值,范圍[0.0, 1.0)
    double d = random.nextDouble();
    // 獲取隨機(jī)的float值,范圍[0.0, 1.0)
    float f = random.nextFloat();
    // 獲取隨機(jī)的int值
    int i1 = random.nextInt();
    // 獲取隨機(jī)的[0,100)之間的int值
    int i2 = random.nextInt(100);
    // 獲取隨機(jī)的高斯分布的double值
    double g = random.nextGaussian();
    // 獲取隨機(jī)的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:

問(wèn)題:生成(-10,10)之間的保留小數(shù)點(diǎn)后兩位數(shù)的隨機(jī)數(shù)。
解決方法:
1.java中隨機(jī)數(shù)生成函數(shù)Random r=new Random(); r.nextFloat();//生成(0,1)之間的浮點(diǎn)型隨機(jī)數(shù)。將上述隨機(jī)數(shù)乘以10,得到生成(0,10)之間的隨機(jī)數(shù)。
2.生成一個(gè)Boolean型的隨機(jī)數(shù)用于控制數(shù)的正負(fù):r.nextBoolean();
3.保留小數(shù)位數(shù)兩位的方法:Math.floor(n*100+0.5)/100;得到的數(shù)為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);
    }
  }

相關(guān)文章

  • Spring Cloud Gateway(讀取、修改 Request Body)的操作

    Spring Cloud Gateway(讀取、修改 Request Body)的操作

    這篇文章主要介紹了Spring Cloud Gateway(讀取、修改 Request Body)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Java手寫線程池之向JDK線程池進(jìn)發(fā)

    Java手寫線程池之向JDK線程池進(jìn)發(fā)

    在前面的文章自己動(dòng)手寫乞丐版線程池中,我們寫了一個(gè)非常簡(jiǎn)單的線程池實(shí)現(xiàn),這個(gè)只是一個(gè)非常簡(jiǎn)單的實(shí)現(xiàn),在本篇文章當(dāng)中我們將要實(shí)現(xiàn)一個(gè)和JDK內(nèi)部實(shí)現(xiàn)的線程池非常相似的線程池,需要的可以了解一下
    2022-10-10
  • SpringBoot基于Redis實(shí)現(xiàn)token的在線續(xù)期的實(shí)踐

    SpringBoot基于Redis實(shí)現(xiàn)token的在線續(xù)期的實(shí)踐

    本文主要介紹了使用Redis實(shí)現(xiàn)JWT令牌在線續(xù)期的方案,通過(guò)在線續(xù)期token,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • 簡(jiǎn)單理解Java的垃圾回收機(jī)制與finalize方法的作用

    簡(jiǎn)單理解Java的垃圾回收機(jī)制與finalize方法的作用

    這篇文章主要介紹了簡(jiǎn)單理解Java的垃圾回收機(jī)制與finalize方法的作用,著重講解了Java的GC銷毀對(duì)象的過(guò)程,需要的朋友可以參考下
    2015-11-11
  • SpringBoot整合ElasticSearch的示例代碼

    SpringBoot整合ElasticSearch的示例代碼

    本篇文章主要介紹了SpringBoot整合ElasticSearch的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • SpringAOP中基于注解實(shí)現(xiàn)通用日志打印方法詳解

    SpringAOP中基于注解實(shí)現(xiàn)通用日志打印方法詳解

    這篇文章主要介紹了SpringAOP中基于注解實(shí)現(xiàn)通用日志打印方法詳解,在日常開發(fā)中,項(xiàng)目里日志是必不可少的,一般有業(yè)務(wù)日志,數(shù)據(jù)庫(kù)日志,異常日志等,主要用于幫助程序猿后期排查一些生產(chǎn)中的bug,需要的朋友可以參考下
    2023-12-12
  • Java?EasyExcel實(shí)現(xiàn)合并相同內(nèi)容單元格與動(dòng)態(tài)標(biāo)題功能

    Java?EasyExcel實(shí)現(xiàn)合并相同內(nèi)容單元格與動(dòng)態(tài)標(biāo)題功能

    這篇文章主要為大家詳細(xì)介紹了Java?EasyExcel如何實(shí)現(xiàn)合并相同內(nèi)容單元格與動(dòng)態(tài)標(biāo)題功能,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考下
    2023-12-12
  • 淺談常用Java數(shù)據(jù)庫(kù)連接池(小結(jié))

    淺談常用Java數(shù)據(jù)庫(kù)連接池(小結(jié))

    這篇文章主要介紹了淺談常用Java數(shù)據(jù)庫(kù)連接池(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Java的Object類九個(gè)方法技巧

    Java的Object類九個(gè)方法技巧

    這篇文章主要介紹了Java的Object類九個(gè)方法技巧,Java的Object?類的完整路徑是java.lang.Object?,是所有類的父類編譯,下文相關(guān)資料,需要的朋友可以參考一下
    2022-04-04
  • Java使用easyExcel導(dǎo)出數(shù)據(jù)及單元格多張圖片

    Java使用easyExcel導(dǎo)出數(shù)據(jù)及單元格多張圖片

    除了平時(shí)簡(jiǎn)單的數(shù)據(jù)導(dǎo)出需求外,我們也經(jīng)常會(huì)遇到一些有固定格式或者模板要求的數(shù)據(jù)導(dǎo)出,下面這篇文章主要給大家介紹了關(guān)于Java使用easyExcel導(dǎo)出數(shù)據(jù)及單元格多張圖片的相關(guān)資料,需要的朋友可以參考下
    2023-05-05

最新評(píng)論