一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java編程中隨機數的生成方式總結

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

2020-05-07 12:06skywang JAVA教程

在Java中利用自帶的類庫可以有三種途徑可以產生隨機數,這里我們舉了一些簡單的例子來進行Java編程中隨機數的生成方式總結,需要的朋友可以參考下

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

?
1
final long l = System.currentTimeMillis();

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

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

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

?
1
final double d = Math.random();

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

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

第3種 利用Random類來獲取隨機數
通過Random類來獲取隨機數。
使用方法如下:
(01) 創建Random對象。有兩種方法可以創建Random對象,如下:

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

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

?
1
int i2 = random.nextInt(100);

Random 的函數接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 構造函數(一): 創建一個新的隨機數生成器。
 
 
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):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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 [email protected]
 */
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型。
代碼如下:
  

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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);
    }
  }

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品手机在线1卡二卡3卡四卡 | 亚洲欧美一区二区三区在线观看 | 欧美香蕉 | 亚洲天堂影院在线观看 | 九九九九视频 | 欧美日本一道高清免费3区 欧美人做人爱a全程免费 | juliaann大战两个黑人 | 被老外玩爽的中国美女视频 | 教室眠催白丝美女校花 | 国产尤物精品视频 | 大奶妈咪女教师 | 国产成人无精品久久久 | 亚州在线视频 | 亚洲精品国产SUV | 免费在线看片网站 | 4444www免费看 | 日日干天天爽 | 成 人 免费 小说在线观看 | 欧美日韩亚洲综合在线一区二区 | 小向美奈子av| 16男男gaygays | 亚洲AV无码乱码在线观看浪潮 | 久久日本片精品AAAAA国产 | 奇米精品 | 亚洲国产精品自在自线观看 | 紧身裙女教师波多野结衣 | 九九九九九九伊人 | 美女奶口隐私免费视频网站 | 香蕉免费高清完整 | 亚洲色图第一页 | 国产亚洲精品看片在线观看 | 出差被灌醉绝伦的上司日本 | 波多野结衣52部合集在线观看 | 免费观看a毛片一区二区不卡 | 日本三级在线观看免费 | 性趣味商品推荐 | 成人青青草 | 亚洲社区在线 | 男同互操 | 色先锋影音先锋 | 激情五月开心 |