- Math.random()
- java.util.Random
Math.random()
從API來看,他是返回[0,1)之間的double,背後採用uniform分配。此方法第一次被叫用時會產生ㄧ個new pseudorandom-number generator,則new java.util.Random()。
若要產生特定區間的值需要自己加工,範例如下
public static void main(String[] args) {
for(int i=0;i<30;i++) {
int random = (int) (Math.random()*10);//產生從[0,10)
System.out.println(random);
}
for(int i=0;i<30;i++) {
int random = (int) (Math.random()*10)+1;//產生從[1,10]
System.out.println(random);
}
}
java.util.Random
Random的特點可以設定seed,使得程式每次產生的隨機結果都相同,也有特定API產生所需要的數字區間不用自己加工,背後的分配同樣也是uniform,
與Math.random()相比則需要new的方式產生物件,稍微麻煩。
public static void main(String[] args) {
Random r1 = new Random();
Random r2 = new Random(10);//constructor 提供直接將seed設入,也可以用r2.setSeed();
for(int i =0;i<30;i++) {
System.out.println(r1.nextInt(10));//產生從[0,10)
System.out.println(r1.nextBoolean());//產生隨機布林
System.out.println(r1.nextGaussian());//N(0,1)的常態分配
}
}
Reference