最近用到隨機(jī)數(shù),但是一直都沒(méi)搞多清楚。剛好用到就總結(jié)一下。(主要是來(lái)源API以及網(wǎng)上)
主要關(guān)注兩方面:
如何產(chǎn)生一個(gè)隨機(jī)數(shù);
如何控制產(chǎn)生的隨機(jī)數(shù)范圍,還包括正負(fù),類型;
JAVA能實(shí)現(xiàn)隨機(jī)數(shù)的方法主要有:
第一種:使用java.lang.math類中的Math.random()方法;
API說(shuō)明是:返回帶正號(hào)的
double
值,該值大于等于
0.0
且小于
1.0
。
返回值是一個(gè)偽隨機(jī)選擇的數(shù),在該范圍內(nèi)(近似)均勻分布。
使用:這個(gè)方法主要用來(lái)返回一個(gè)正整數(shù),例:int a = (int) (Math.random() * 1000) ;
即可返回一個(gè)0~1000內(nèi)的所有正整數(shù),不過(guò)不知道包不包括0和1000,想也應(yīng)該是包括地!當(dāng)然你可以換成100。
很多時(shí)候我們用到隨機(jī)數(shù)主要是出于某個(gè)對(duì)象或其他事件有多種可能的狀態(tài)。通過(guò)產(chǎn)生隨機(jī)數(shù),
隨機(jī)地實(shí)現(xiàn)某一狀態(tài),改變顯示結(jié)果或是使程序進(jìn)入某一分支中。
例如俄羅斯方塊中,方塊有七種類型,同時(shí)每一個(gè)方塊又有四種狀態(tài)。可以用這樣的方式 來(lái)隨機(jī)產(chǎn)生下落的
方塊:
int blockType = (int) (Math.random() * 1000) % 7;
int turnState = (int) (Math.random() * 1000) % 4;
第二種:使用java.util.Random類的Random對(duì)象。當(dāng)然他的功能就強(qiáng)大多了,不僅僅可以產(chǎn)生隨機(jī)整數(shù),浮點(diǎn)數(shù),長(zhǎng)整型,布爾數(shù)都可以。
只要調(diào)用相應(yīng)的方法即可。
使用:java.util.Random r = new java.util.Random();
Tpye x = r.nextTpye();//這里用了描述語(yǔ)言,具體用那個(gè)自己選;
產(chǎn)生的隨機(jī)數(shù)真不知道是那個(gè)。可以肯定上面代碼如果是整型,那一般是很大的數(shù),同時(shí)有正有負(fù)。
如何生成某個(gè)范圍的隨機(jī)數(shù)?比如像上面,0~1000之間的隨機(jī)數(shù)?
一般的方法是:取正取模
Random r = new Random();
int a = (r.nextInt()>>>1)%100;
但會(huì)出現(xiàn)值偏小的情況。
所以,JDK升級(jí)的版本的用法就為nextInt(100)產(chǎn)生0-100之間的隨機(jī)數(shù),更方便。
API:public int
nextInt(int n)
返回一個(gè)偽隨機(jī)數(shù),它是取自此隨機(jī)數(shù)生成器序列的、在 0(包括)和指定值(不包括)之間均勻分布的
int
值。
其他類型的也一樣。
還可以簡(jiǎn)單地用如:
Random r = new Random();
int i = r.randomInt(10);//輸入一個(gè)0到9 的隨機(jī)數(shù);
就先寫到這里,有機(jī)會(huì)再加吧!