一. java.lang.Math.Random
作用:返回帶正號(hào)的double值,返回值是一個(gè)偽隨機(jī)選擇的數(shù)菠秒,在該范圍內(nèi)(近似)均勻分布疙剑。
范圍:[0.0,1.0)的左閉右開區(qū)間
原理:Math.Random內(nèi)部是調(diào)用的Java.util.Random無(wú)參構(gòu)造器實(shí)現(xiàn)的
代碼:
package Java_study;
//無(wú)需導(dǎo)包
public class suiji1 {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
System.out.println(Math.random());
}
}
}
測(cè)試記錄:
0.2656139815369676
0.9545819797288358
0.48223757014225377
0.5396096975059794
0.2549847220943994
二. java.util.Random
使用的是48-bit的種子,然后調(diào)用一個(gè)linear congruential formula線性同余 。如果兩個(gè)Random實(shí)例使用相同的種子核芽,并且調(diào)用同樣的函數(shù),那么生成的sequence是相同的.
- 無(wú)參構(gòu)造Random():創(chuàng)建一個(gè)新的隨機(jī)數(shù)生成器酵熙。
1)無(wú)參構(gòu)造器內(nèi)部也是調(diào)用的有參構(gòu)造器轧简,只是種子是通過(guò)系統(tǒng)當(dāng)前時(shí)間計(jì)算出來(lái)的一個(gè)long型數(shù)據(jù),所以多次運(yùn)行結(jié)果都不一樣 - 有參構(gòu)造Random(long seed):使用單個(gè) long 種子創(chuàng)建一個(gè)新的隨機(jī)數(shù)生成器匾二。
1)有參構(gòu)造在指定種子(seed)值不變的情況下哮独,返回隨機(jī)數(shù)的序列是固定的。
方法摘要:
生成下一個(gè)偽隨機(jī)數(shù)察藐。
protected int next(int bits)
返回下一個(gè)偽隨機(jī)數(shù)皮璧,它是取自此隨機(jī)數(shù)生成器序列的均勻分布的boolean值。
boolean nextBoolean()
生成隨機(jī)字節(jié)并將其置于用戶提供的 byte 數(shù)組中分飞。
void nextBytes(byte[] bytes)
返回下一個(gè)偽隨機(jī)數(shù)悴务,它是取自此隨機(jī)數(shù)生成器序列的、在0.0和1.0之間均勻分布的 double值譬猫。
double nextDouble()
返回下一個(gè)偽隨機(jī)數(shù)讯檐,它是取自此隨機(jī)數(shù)生成器序列的、在0.0和1.0之間均勻分布float值染服。
float nextFloat()
返回下一個(gè)偽隨機(jī)數(shù)别洪,它是取自此隨機(jī)數(shù)生成器序列的、呈高斯(“正態(tài)”)分布的double值柳刮,其平均值是0.0標(biāo)準(zhǔn)差是1.0挖垛。
double nextGaussian()
返回下一個(gè)偽隨機(jī)數(shù),它是此隨機(jī)數(shù)生成器的序列中均勻分布的 int 值秉颗。
int nextInt()
返回一個(gè)偽隨機(jī)數(shù)痢毒,它是取自此隨機(jī)數(shù)生成器序列的、在(包括和指定值(不包括)之間均勻分布的int值站宗。
int nextInt(int n)
返回下一個(gè)偽隨機(jī)數(shù)闸准,它是取自此隨機(jī)數(shù)生成器序列的均勻分布的 long 值。
long nextLong()
使用單個(gè) long 種子設(shè)置此隨機(jī)數(shù)生成器的種子梢灭。
void setSeed(long seed)
范圍
- double d1 = r.nextDouble();
=> 生成[0,1.0)區(qū)間的小數(shù) - double d2 = r.nextDouble() * 5;
=> 生成[0,5.0)區(qū)間的小數(shù) - double d3 = r.nextDouble() * 1.5 + 1;
=> 生成[1,2.5)區(qū)間的小數(shù) - int n = r.nextInt();
=> 生成[-231,231-1)之間的整數(shù) - 生成[0,10)區(qū)間的整數(shù)
int n2 = r.nextInt(10);
n2 = Math.abs(r.nextInt() % 10); //對(duì)10取余后夷家,Math.abs取絕對(duì)值
代碼:
package Java_study;
import java.util.Random;
public class suiji2 {
public static void main(String[] args) {
// 創(chuàng)建對(duì)象
Random r = new Random();
for (int x = 1; x <= 10; x++) {
//獲取隨機(jī)數(shù)
int number = r.nextInt();
System.out.println("number:" + number);
}
System.out.println("----------");
for (int x = 1; x <= 10; x++) {
//獲取隨機(jī)數(shù)
int number1 = r.nextInt(10);
System.out.println("number1:" + number1);
}
System.out.println("----------");
//如果獲取一個(gè)1-100之間的隨機(jī)數(shù)呢?
int i = r.nextInt(100) + 1;
System.out.println(i);
}
}
測(cè)試記錄:
number:288284056
number:1636033943
number:657595534
number:-2128946490
number:1232717773
number:1103976520
number:1865262929
number:1076542435
number:879661990
number:21193790
----------
number1:9
number1:6
number1:0
number1:6
number1:7
number1:4
number1:1
number1:6
number1:6
number1:1
----------
93