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值的表達範圍,呵呵。