Java獲取隨機數(shù)的3種方法

方法1

(數(shù)據(jù)類型)(最小值+Math.random()*(最大值-最小值+1))

例:

(int)(1+Math.random()*(10-1+1))

從1到10的int型隨數(shù)

方法2

獲得隨機數(shù)

for (int i=0;i<30;i++)

{System.out.println((int)(1+Math.random()*10));}

(int)(1+Math.random()*10)

通過java.Math包的random方法得到1-10的int隨機數(shù)

公式是:最小值---最大值(整數(shù))的隨機數(shù)

(類型)最小值+Math.random()*最大值

方法3

Random ra =new Random();

for (int i=0;i<30;i++)

{System.out.println(ra.nextInt(10)+1);}

通過java.util包中的Random類的nextInt方法來得到1-10的int隨機數(shù)

生成0到1之間的任意隨機小數(shù):

生成[0,d)區(qū)間的隨機小數(shù),d為任意正的小數(shù),則只需要將nextDouble方法的返回值乘以d即可。

[n1,n2]

也就是 ra.nextDouble() * (n2-n1)+n1

java產(chǎn)生隨機數(shù)的幾種方式

一.在j2se里我們可以使用Math.random()方法來產(chǎn)生一個隨機數(shù),這個產(chǎn)生的隨機數(shù)是0-1之間的一個double,我們可以把他乘以一定的數(shù),比如說乘以100,他就是個100以內(nèi)的隨機,這個在j2me中沒有。

二.在java.util這個包里面提供了一個Random的類,我們可以新建一個Random的對象來產(chǎn)生隨機數(shù),他可以產(chǎn)生隨機整數(shù)、隨機float、隨機double,隨機long,這個也是我們在j2me的程序里經(jīng)常用的一個取隨機數(shù)的方法。

三.在我們的System類中有一個currentTimeMillis()方法,這個方法返回一個從1970年1月1號0點0分0秒到目前的一個毫秒數(shù),返回類型是long,我們可以拿他作為一個隨機數(shù),我們可以拿他對一些數(shù)取模,就可以把他限制在一個范圍之內(nèi)啦

其實在Random的默認構(gòu)造方法里也是使用上面第三種方法進行隨機數(shù)的產(chǎn)生的

對于方法二中的Random類有以下說明:

java.util.Random類有兩種方式構(gòu)建方式:帶種子和不帶種子

不帶種子:

此種方式將會返回隨機的數(shù)字,每次運行結(jié)果不一樣

public class RandomTest {

public static void main(String[] args) {

java.util.Random r=new java.util.Random();

for(int i=0;i<10;i++){

System.out.println(r.nextInt());

}

}

帶種子:

此種方式,無論程序運行多少次,返回結(jié)果都是一樣的

public static void main(String[] args) {

java.util.Random r=new java.util.Random(10);

for(int i=0;i<10;i++){

System.out.println(r.nextInt());

}

}

兩種方式的差別在于

(1) 首先請打開Java Doc,我們會看到Random類的說明:

此類的實例用于生成偽隨機數(shù)流,此類使用 48 位的種子,該種子可以使用線性同余公式對其進行修改(請參閱 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 節(jié))。

如果用相同的種子創(chuàng)建兩個 Random 實例,則對每個實例進行相同的方法調(diào)用序列,它們將生成并返回相同的數(shù)字序列。為了保證實現(xiàn)這種特性,我們?yōu)轭怰andom指定了特定的算法。為了 Java 代碼的完全可移植性,Java 實現(xiàn)必須讓類 Random 使用此處所示的所有算法。但是允許 Random 類的子類使用其他算法,只要其符合所有方法的常規(guī)協(xié)定即可。

Java Doc對Random類已經(jīng)解釋得非常明白,我們的測試也驗證了這一點。

(2) 如果沒有提供種子數(shù),Random實例的種子數(shù)將是當前時間的毫秒數(shù),可以通過System.currentTimeMillis()來獲得當前時間的毫秒數(shù)。打開JDK的源代碼,我們可以非常明確地看到這一點。

public Random() { this(System.currentTimeMillis()); }

另外:

random對象的nextInt(),nextInt(int n)方法的說明:

int nextInt()

返回下一個偽隨機數(shù),它是此隨機數(shù)生成器的序列中均勻分布的 int 值。

int nextInt(int n)

返回一個偽隨機數(shù),它是從此隨機數(shù)生成器的序列中取出的、在 0(包括)和指定值(不包括)之間均勻分布的 int值。

Java隨機數(shù)總結(jié)

隨機數(shù)在實際中使用很廣泛,比如要隨即生成一個固定長度的字符串、數(shù)字。或者隨即生成一個不定長度的數(shù)字、或者進行一個模擬的隨機選擇等等。Java提供了最基本的工具,可以幫助開發(fā)者來實現(xiàn)這一切。

一、Java隨機數(shù)的產(chǎn)生方式

在Java中,隨機數(shù)的概念從廣義上將,有三種。

1、通過System.currentTimeMillis()來獲取一個當前時間毫秒數(shù)的long型數(shù)字。

2、通過Math.random()返回一個0到1之間的double值。

3、通過Random類來產(chǎn)生一個隨機數(shù),這個是專業(yè)的Random工具類,功能強大。

二、Random類API說明

1、Java API說明

Random類的實例用于生成偽隨機數(shù)流。此類使用 48 位的種子,使用線性同余公式對其進行修改(請參閱 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 節(jié))。

如果用相同的種子創(chuàng)建兩個 Random 實例,則對每個實例進行相同的方法調(diào)用序列,它們將生成并返回相同的數(shù)字序列。為了保證屬性的實現(xiàn),為類 Random 指定了特定的算法。

很多應用程序會發(fā)現(xiàn) Math 類中的 random 方法更易于使用。

2、方法摘要

Random()

創(chuàng)建一個新的隨機數(shù)生成器。

Random(long seed)

使用單個 long 種子創(chuàng)建一個新隨機數(shù)生成器: public Random(long seed) { setSeed(seed); } next 方法使用它來保存隨機數(shù)生成器的狀態(tài)。

protected int next(int bits)

生成下一個偽隨機數(shù)。

boolean nextBoolean()

返回下一個偽隨機數(shù),它是從此隨機數(shù)生成器的序列中取出的、均勻分布的 boolean 值。

void nextBytes(byte[] bytes)

生成隨機字節(jié)并將其置于用戶提供的字節(jié)數(shù)組中。

double nextDouble()

返回下一個偽隨機數(shù),它是從此隨機數(shù)生成器的序列中取出的、在 0.0 和 1.0之間均勻分布的 double 值。

float nextFloat()

返回下一個偽隨機數(shù),它是從此隨機數(shù)生成器的序列中取出的、在 0.0 和 1.0 之間均勻分布的 float 值。

double nextGaussian()

返回下一個偽隨機數(shù),它是從此隨機數(shù)生成器的序列中取出的、呈高斯(“正常地”)分布的 double 值,其平均值是 0.0,標準偏差是 1.0。

int nextInt()

返回下一個偽隨機數(shù),它是此隨機數(shù)生成器的序列中均勻分布的 int 值。

int nextInt(int n)

返回一個偽隨機數(shù),它是從此隨機數(shù)生成器的序列中取出的、在 0(包括)和指定值(不包括)之間均勻分布的 int值。

long nextLong()

返回下一個偽隨機數(shù),它是從此隨機數(shù)生成器的序列中取出的、均勻分布的 long 值。

void setSeed(long seed)

使用單個 long 種子設置此隨機數(shù)生成器的種子。

三、Random類使用說明

1、帶種子與不帶種子的區(qū)別Random類使用的根本是策略分帶種子和不帶種子的Random的實例。

通俗說,兩者的區(qū)別是:帶種子的,每次運行生成的結(jié)果都是一樣的。

不帶種子的,每次運行生成的都是隨機的,沒有規(guī)律可言。

2、創(chuàng)建不帶種子的Random對象

Random random = new Random();

3、創(chuàng)建不帶種子的Random對象有兩種方法:

1) Random random = new Random(555L);

2) Random random = new Random();random.setSeed(555L);

四、測試

通過一個例子說明上面的用法

import java.util.Random;

public class TestRandomNum {

public static void main(String[] args) {

randomTest();

testNoSeed();

testSeed1();

testSeed2();

}

public static void randomTest() {

System.out.println("--------------test()--------------");

//返回以毫秒為單位的當前時間。

long r1 = System.currentTimeMillis();

//返回帶正號的 double 值,大于或等于 0.0,小于 1.0。

double r2 = Math.random();

//通過Random類來獲取下一個隨機的整數(shù)

int r3 = new Random().nextInt();

System.out.println("r1 = " + r1);

System.out.println("r3 = " + r2);

System.out.println("r2 = " + r3);

}

public static void testNoSeed() {

System.out.println("--------------testNoSeed()--------------");

//創(chuàng)建不帶種子的測試Random對象

Random random = new Random();

for (int i = 0; i < 3; i++) {

System.out.println(random.nextInt());

}

}

public static void testSeed1() {

System.out.println("--------------testSeed1()--------------");

//創(chuàng)建帶種子的測試Random對象

Random random = new Random(555L);

for (int i = 0; i < 3; i++) {

System.out.println(random.nextInt());

}

}

public static void testSeed2() {

System.out.println("--------------testSeed2()--------------");

//創(chuàng)建帶種子的測試Random對象

Random random = new Random();

random.setSeed(555L);

for (int i = 0; i < 3; i++) {

System.out.println(random.nextInt());

}

}

}

運行結(jié)果:

--------------test()--------------

r1 = 1227108626582

r3 = 0.5324887850155043

r2 = -368083737

--------------testNoSeed()--------------

809503475

1585541532

-645134204

--------------testSeed1()--------------

-1367481220

292886146

-1462441651

--------------testSeed2()--------------

-1367481220

292886146

-1462441651

Process finished with exit code 0

通過testSeed1()與testSeed2()方法的結(jié)果可以看到,兩個打印結(jié)果相同,因為他們種子相同,再運行一次,結(jié)果還是一樣的,這就是帶種子隨機數(shù)的特性。

而不帶種子的,每次運行結(jié)果都是隨機的。

五、綜合應用

下面通過最近寫的一個隨機數(shù)工具類來展示用法:

import java.util.Random;

public class RandomUtils {

public static final String allChar = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

public static final String letterChar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

public static final String numberChar = "0123456789";

public static String generateString(int length) {

StringBuffer sb = new StringBuffer();

Random random = new Random();

for (int i = 0; i < length; i++) {

sb.append(allChar.charAt(random.nextInt(allChar.length())));

}

return sb.toString();

}

public static String generateMixString(int length) {

StringBuffer sb = new StringBuffer();

Random random = new Random();

for (int i = 0; i < length; i++) {

sb.append(allChar.charAt(random.nextInt(letterChar.length())));

}

return sb.toString();

}

public static String generateLowerString(int length) {

return generateMixString(length).toLowerCase();

}

public static String generateUpperString(int length) {

return generateMixString(length).toUpperCase();

}

public static String generateZeroString(int length) {

StringBuffer sb = new StringBuffer();

for (int i = 0; i < length; i++) {

sb.append('0');

}

return sb.toString();

}

public static String toFixdLengthString(long num, int fixdlenth) {

StringBuffer sb = new StringBuffer();

String strNum = String.valueOf(num);

if (fixdlenth - strNum.length() >= 0) {

sb.append(generateZeroString(fixdlenth - strNum.length()));

} else {

throw new RuntimeException("將數(shù)字" + num + "轉(zhuǎn)化為長度為" + fixdlenth + "的字符串發(fā)生異常!");

}

sb.append(strNum);

return sb.toString();

}

public static String toFixdLengthString(int num, int fixdlenth) {

StringBuffer sb = new StringBuffer();

String strNum = String.valueOf(num);

if (fixdlenth - strNum.length() >= 0) {

sb.append(generateZeroString(fixdlenth - strNum.length()));

} else {

throw new RuntimeException("將數(shù)字" + num + "轉(zhuǎn)化為長度為" + fixdlenth + "的字符串發(fā)生異常!");

}

sb.append(strNum);

return sb.toString();

}

public static void main(String[] args) {

System.out.println(generateString(15));

System.out.println(generateMixString(15));

System.out.println(generateLowerString(15));

System.out.println(generateUpperString(15));

System.out.println(generateZeroString(15));

System.out.println(toFixdLengthString(123, 15));

System.out.println(toFixdLengthString(123L, 15));

}

}

運行結(jié)果:

vWMBPiNbzfGCpHG

23hyraHdJkKPwMv

tigowetbwkm1nde

BPZ1KNEJPHB115N

000000000000000

000000000000123

000000000000123

Process finished with exit code 0

六、總結(jié)

1、隨機數(shù)很常用,在Java有三種產(chǎn)生方式,以Random隨機數(shù)的使用最為復雜。

2、Random類對象有是否帶種子之分,帶種子的只要種子相同,多次運行,生成隨機數(shù)的結(jié)果總是那樣。

3、帶種子隨機數(shù)的帶種子的對象創(chuàng)建方式有兩種,效果一樣。但是帶種子的隨機數(shù)用處似乎不大。

4、Random的功能涵蓋了Math.random()的功能。

5、可以通過隨機數(shù)去做實現(xiàn)隨機字符串等復雜的隨機數(shù)據(jù)。

6、不要研究不重復的隨機數(shù),意義不大。

在Java 中我們可以使用java.util.Random類來產(chǎn)生一個隨機數(shù)發(fā)生器。它有兩種形式的構(gòu)造函數(shù),分別是Random()和Random(long seed)。Random()使用當前時間即System.currentTimeMillis()作為發(fā)生器的種子,Random(long seed)使用指定的seed作為發(fā)生器的種子。

隨機數(shù)發(fā)生器(Random)對象產(chǎn)生以后,通過調(diào)用不同的method:nextInt()、nextLong()、nextFloat()、nextDouble()等獲得不同類型隨機數(shù)。

1>生成隨機數(shù)

Random random = new Random();

Random random = new Random(100);//指定種子數(shù)100

random調(diào)用不同的方法,獲得隨機數(shù)。

如果2個Random對象使用相同的種子(比如都是100),并且以相同的順序調(diào)用相同的函數(shù),那它們返回值完全相同。如下面代碼中兩個Random對象的輸出完全相同

import java.util.*;

class TestRandom {

public static void main(String[] args) {

Random random1 = new Random(100);

System.out.println(random1.nextInt());

System.out.println(random1.nextFloat());

System.out.println(random1.nextBoolean());

Random random2 = new Random(100);

System.out.println(random2.nextInt());

System.out.println(random2.nextFloat());

System.out.println(random2.nextBoolean());

}

}

2>指定范圍內(nèi)的隨機數(shù)

隨機數(shù)控制在某個范圍內(nèi),使用模數(shù)運算符%

import java.util.*;

class TestRandom {

public static void main(String[] args) {

Random random = new Random();

for(int i = 0; i < 10;i++) {

System.out.println(Math.abs(random.nextInt()));

}

}

}

獲得的隨機數(shù)有正有負的,用Math.abs使獲取數(shù)據(jù)范圍為非負數(shù)

3>獲取指定范圍內(nèi)的不重復隨機數(shù)

import java.util.*;

class TestRandom {

public static void main(String[] args) {

int[] intRet = new int[6];

int intRd = 0; //存放隨機數(shù)

int count = 0; //記錄生成的隨機數(shù)個數(shù)

int flag = 0; //是否已經(jīng)生成過標志

while(count<6){

Random rdm = new Random(System.currentTimeMillis());

intRd = Math.abs(rdm.nextInt())2+1;

for(int i=0;i

if(intRet[i]==intRd){

flag = 1;

break;

}else{

flag = 0;

}

}

if(flag==0){

intRet[count] = intRd;

count++;

}

}

for(int t=0;t<6;t++){

System.out.println(t+"->"+intRet[t]);

}

}

}

Java中的隨機數(shù)是否可以重復?Java中產(chǎn)生的隨機數(shù)能否可以用來產(chǎn)生數(shù)據(jù)庫主鍵?帶著這個問題,我們做了一系列測試。

1.測試一: 使用不帶參數(shù)的Random()構(gòu)造函數(shù)

public class RandomTest {

public static void main(String[] args) {

java.util.Random r=new java.util.Random();

for(int i=0;i<10;i++){

System.out.println(r.nextInt());

}

}

}

程序運行結(jié)果:

-1761145445

-1070533012

216216989

-910884656

-1408725314

-1091802870

1681403823

-1099867456

347034376

-1277853157

再次運行該程序:

-169416241

220377062

-1140589550

-1364404766

-1088116756

2134626361

-546049728

1132916742

-1522319721

1787867608

從上面的測試我們可以看出,使用不帶參數(shù)的Random()構(gòu)造函數(shù)產(chǎn)生的隨機數(shù)不會重復。那么,什么情況下Java會產(chǎn)生重復的隨機數(shù)呢?且看下面的測試。

2. 測試二:為Random設置種子數(shù)

public class RandomTest_Repeat {

public static void main(String[] args) {

java.util.Random r=new java.util.Random(10);

for(int i=0;i<10;i++){

System.out.println(r.nextInt());

}

}

}

無論程序運行多少次,其結(jié)果總是:

-1157793070

1913984760

1107254586

1773446580

254270492

-1408064384

1048475594

1581279777

-778209333

1532292428

甚至在不同的機器上測試,測試結(jié)果也不會改變!

3.原因分析:

(1) 首先請打開Java Doc,我們會看到Random類的說明:

此類的實例用于生成偽隨機數(shù)流,此類使用 48 位的種子,該種子可以使用線性同余公式對其進行修改(請參閱 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 節(jié))。

如果用相同的種子創(chuàng)建兩個 Random 實例,則對每個實例進行相同的方法調(diào)用序列,它們將生成并返回相同的數(shù)字序列。為了保證實現(xiàn)這種特性,我們?yōu)轭怰andom指定了特定的算法。為了 Java 代碼的完全可移植性,Java 實現(xiàn)必須讓類 Random 使用此處所示的所有算法。但是允許 Random 類的子類使用其他算法,只要其符合所有方法的常規(guī)協(xié)定即可。

Java Doc對Random類已經(jīng)解釋得非常明白,我們的測試也驗證了這一點。

(2) 如果沒有提供種子數(shù),Random實例的種子數(shù)將是當前時間的毫秒數(shù),可以通過System.currentTimeMillis()來獲得當前時間的毫秒數(shù)。打開JDK的源代碼,我們可以非常明確地看到這一點。

public Random() { this(System.currentTimeMillis()); }

4. 結(jié)論:

通過上面的測試和分析,我們會對Random類有較為深刻的理解。同時,我覺得,通過閱讀Java Doc的API文檔,可以很好地提高我們的Java編程能力,做到“知其然”;一旦遇到費解的問題,不妨打開Java的源代碼,這樣我們就能做到“知其所以然”。

--------------------------------------------------------------------------------------------------

java中一般有兩種隨機數(shù),一個是Math中random()方法,一個是Random類。

一、Math.random()

隨即生成0

實例:如何寫,生成隨機生成出0~100中的其中一個數(shù)呢?

Math.random()返回的只是從0到1之間的小數(shù),如果要50到100,就先放大50倍,即0到50之間,這里還是小數(shù),如果要整數(shù),就強制轉(zhuǎn)換int,然后再加上50即為50~100.

最終代碼:(int)(Math.random()*50) + 50

二、Random類

Random random = new Random();//默認構(gòu)造方法

Random random = new Random(1000);//指定種子數(shù)字

在進行隨機時,隨機算法的起源數(shù)字稱為種子數(shù)(seed),在種子數(shù)的基礎上進行一定的變換,從而產(chǎn)生需要的隨機數(shù)字。

相同種子數(shù)的Random對象,相同次數(shù)生成的隨機數(shù)字是完全相同的。也就是說,兩個種子數(shù)相同的Random對象,第一次生成的隨機數(shù)字完全相同,第二次生成的隨機數(shù)字也完全相同。

2 、Random類中的常用方法

Random 類中的方法比較簡單,每個方法的功能也很容易理解。需要說明的是,Random類中各方法生成的隨機數(shù)字都是均勻分布的,也就是說區(qū)間內(nèi)部的數(shù)字生成的幾率是均等的。下面對這些方法做一下基本的介紹:

a 、public boolean nextBoolean()

該方法的作用是生成一個隨機的boolean值,生成true和false的值幾率相等,也就是都是50%的幾率。

b 、public double nextDouble()

該方法的作用是生成一個隨機的double值,數(shù)值介于[0,1.0)之間,這里中括號代表包含區(qū)間端點,小括號代表不包含區(qū)間端點,也就是0到1之間的隨機小數(shù),包含0而不包含1.0。

c 、public int nextInt()

該方法的作用是生成一個隨機的int值,該值介于int的區(qū)間,也就是-2的31次方到2的31次方-1之間。

如果需要生成指定區(qū)間的int值,則需要進行一定的數(shù)學變換,具體可以參看下面的使用示例中的代碼。

d 、public int nextInt(int n)

該方法的作用是生成一個隨機的int值,該值介于[0,n)的區(qū)間,也就是0到n之間的隨機int值,包含0而不包含n。

如果想生成指定區(qū)間的int值,也需要進行一定的數(shù)學變換,具體可以參看下面的使用示例中的代碼。

e 、public void setSeed(long seed)

該方法的作用是重新設置Random對象中的種子數(shù)。設置完種子數(shù)以后的Random對象和相同種子數(shù)使用new關(guān)鍵字創(chuàng)建出的Random對象相同。

3 、Random類使用示例

使用Random類,一般是生成指定區(qū)間的隨機數(shù)字,下面就一一介紹如何生成對應區(qū)間的隨機數(shù)字。以下生成隨機數(shù)的代碼均使用以下Random對象r進行生成:

Random r = new Random();

a 、生成[0,1.0)區(qū)間的小數(shù)

double d1 = r.nextDouble();

直接使用nextDouble方法獲得。

b、生成[0,5.0)區(qū)間的小數(shù)

double d2 = r.nextDouble() * 5;

因為nextDouble方法生成的數(shù)字區(qū)間是[0,1.0),將該區(qū)間擴大5倍即是要求的區(qū)間。

同理,生成[0,d)區(qū)間的隨機小數(shù),d為任意正的小數(shù),則只需要將nextDouble方法的返回值乘以d即可。

c、生成[1,2.5)區(qū)間的小數(shù)[n1,n2]

double d3 = r.nextDouble() * 1.5 + 1;【也就是 r.nextDouble() * (n2-n1)+n1】

生成[1,2.5)區(qū)間的隨機小數(shù),則只需要首先生成[0,1.5)區(qū)間的隨機數(shù)字,然后將生成的隨機數(shù)區(qū)間加1即可。

同理,生成任意非從0開始的小數(shù)區(qū)間[d1,d2)范圍的隨機數(shù)字(其中d1不等于0),則只需要首先生成[0,d2-d1)區(qū)間的隨機數(shù)字,然后將生成的隨機數(shù)字區(qū)間加上d1即可。

d、生成任意整數(shù)

int n1 = r.nextInt();

直接使用nextInt方法即可。

e、生成[0,10)區(qū)間的整數(shù)

int n2 = r.nextInt(10);

n2 = Math.abs(r.nextInt() % 10);

以上兩行代碼均可生成[0,10)區(qū)間的整數(shù)。

第一種實現(xiàn)使用Random類中的nextInt(int n)方法直接實現(xiàn)。

第二種實現(xiàn)中,首先調(diào)用nextInt()方法生成一個任意的int數(shù)字,該數(shù)字和10取余以后生成的數(shù)字區(qū)間為(-10,10),因為按照數(shù)學上的規(guī)定余數(shù)的絕對值小于除數(shù),然后再對該區(qū)間求絕對值,則得到的區(qū)間就是[0,10)了。

同理,生成任意[0,n)區(qū)間的隨機整數(shù),都可以使用如下代碼:

int n2 = r.nextInt(n);

n2 = Math.abs(r.nextInt() % n);

f、生成[0,10]區(qū)間的整數(shù)

int n3 = r.nextInt(11);

n3 = Math.abs(r.nextInt() % 11);

相對于整數(shù)區(qū)間,[0,10]區(qū)間和[0,11)區(qū)間等價,所以即生成[0,11)區(qū)間的整數(shù)。

g、生成[-3,15)區(qū)間的整數(shù)

int n4 = r.nextInt(18) - 3;【也就是 r.nextInt() * (n2-n1)+n1】 n1是個負數(shù)

n4 = Math.abs(r.nextInt() % 18) - 3;

生成非從0開始區(qū)間的隨機整數(shù),可以參看上面非從0開始的小數(shù)區(qū)間實現(xiàn)原理的說明。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容