天天看點

J2ME取随機數

Random rd;

rd=rd.nextInt()>>>1%101,本來就是以時間為種子,分布應該是比較均勻的。

至于sbamdanb00(甲蟲)所說的:

 public int ramdon(int area1, int area2) {

  while (true) {

   try {

    Thread.sleep(100);

   }

   catch (Exception e) {

   }

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

   intTmp = Math.abs(intTmp % area2);

   if (intTmp >=area1 && intTmp <=area2) {

    return intTmp;

   }

  }

 }

樓主注意了,樓上的都少說了一點,如果按他們的方法連續取随機數,很可能數值在一個時間段會都一樣,必須睡一會兒

解釋;

1。    rand.nextInt()産生的是int型資料,有正負之分.

    >>> 1 這樣邏輯右移一位,最高位填0,就變成正值。

    當然Math.abs()也是可以的,但是>>>屬于移位操作,速度要快的多。

    比如有個面試題:怎樣最快的實作2的3次方=8?

    答案就是:2 << 3 = 8

2。為什麼要 %101?

   樓豬的要求是得到0-》100嘛。

   % 100 得到的是 0 -》99嘛。

   一個數除以100,餘數有可能等于100嗎?顯然除以101才可以。

3.随機産生的int值有可能是負數,直接%101會産生負數,通過邏輯右移把最高位變成0,就是正數了。

取絕對值要調用方法,java虛拟機要壓棧,建立Frame,效率太低。而且還有隐含的錯誤,就是當你對最小的int值取絕對值的時候,它的絕對值比最大的int值還有大1,超出了int值的表達範圍,呵呵。