J2ME中Random類的使用

發表于:2007-07-01來源:作者:點擊數: 標簽:
在J2ME中,由于大部分的 游戲 都會涉及到隨機性的事件,Random類自然就成為J2ME 程序員 經常使用的一個類了。但是對于新手來說,Random類看似簡單,也有可能會出現這樣那樣的錯誤。所以在這里把我對于這個類的使用心得總結一下。 random類在CLDC1.0中就已經定
在J2ME中,由于大部分的游戲都會涉及到隨機性的事件,Random類自然就成為J2ME程序員經常使用的一個類了。但是對于新手來說,Random類看似簡單,也有可能會出現這樣那樣的錯誤。所以在這里把我對于這個類的使用心得總結一下。

random類在CLDC1.0中就已經定義了。這個類有兩個構造函數Random() 和Random(long seed) 并且提供了四個常用方法:

next(int bits)
nextInt()
nextLong()
setSeed(long seed)

其中next(int bits)用來產生指定范圍的隨機數,即:
next(1)產生2的1次方之內的隨機數
next(2)產生2的2次方之內的隨機數
next(3)產生2的3次方之內的隨機數
...............................
next(n)產生2的n次方之內的隨機數
...............................
next(32)產生2的32次方之內的隨機數,就相當于nextInt()了
nextInt()用來產生隨機整數,最大2的32次方
nextLong()用來產生隨機長整數,最大2的64次方
setSeed(long seed) 用于設定隨機數的種子,即這里的seed。隨機數種子的用處是:一般說來,這里的Random類產生隨機數是偽隨機數,是系統采用特定的算法生成出來的,關于這一點我們可以采用一個試驗來證明。方法是new兩個Random類random1和random2。各自調用nextInt方法10次,我們可以看出,雖然各自產生的是隨機數,但是兩個Random類產生的隨機數都是一樣的。這就使得隨機數存在著漏洞。如果這樣的隨機數用在安全應用上面,就達不到預想的效果了。所以Random類提供了這個方法,以進一步提高隨機性。

在這里需要特別為新手朋友們指出的是,我們在使用隨機數的時候,不能每次都new 一個 Random類出來,又不設定隨機數種子,因為那樣作的結果是,每次產生的隨機數都是一樣的。
將一個“錯誤”的例子寫在這里:
import java.util.Random;

import javax.microedition.midlet.*;

public class J2ME extends MIDlet {
private Random random;

public J2ME() {
}

protected void startApp() throws MIDletStateChangeException {
for (int i = 0; i < 20; i++) {
random=new Random();
System.out.println(random.nextInt());
}

}

protected void pauseApp() {
}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
}
這個例子產生的隨機數很多都是相同的。正確的做法應該是在 protected void startApp() throws MIDletStateChangeException 函數中做出如下修改
random=new Random();
for (int i = 0; i < 20; i++) {
System.out.println(random.nextInt());
}
關于Random類的總結就到這里了,相信大家都可以正確使用這個類了。呵呵,請多關照。
MSN:cuilichen@hotmail.com



原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97