一種是使用Random物件,另一種是Math.random()函式。
1. java.util.Random
Random物件可以產生許多型態的亂數,
如int、double、boolean...等等。
import java.util.Random; Random randomGenerator = new Random(); int num1 = randomGenerator.nextInt(); int num2 = randomGenerator.nextInt(n); int num3 = randomGenerator.nextInt(n)+m; double num4 = randomGenerator.nextDouble();
nextInt()可以產生任意整數亂數;(line 3)
若給予一個引數n,則會產生0~n-1的亂數;(line 4)
也可以加上offset m,產生m~n+m-1的亂數。(line 5)
舉個例來說,nextInt(3)+5會隨機產生5,6,7三個數的其中一個。
(n就是指定亂數範圍大小)
nextDouble()則可以產生0.0~1.0之間的亂數,(不包含1.0)
待會提到的Math.random()方法會有更詳盡說明。
2. java.lang.Math.random()
Returns a double value with a positive sign,
greater than or equal to 0.0 and less than 1.0.
由此說明可得知:0.0 ≦ Math.random() < 1.0
這個函式被呼叫時,
Java會自動產生一個Random物件,然後呼叫nextDouble()函式。
此函式的方便之處,就是不需要另外創造一個Random物件。
(1) 產生 [0..10] 的亂數 ( 0 ≦ randomNum ≦ 10 )
將 Math.random() 乘以11,
產生 0.0 ≦ Math.random() < 11.0 的亂數範圍,
之後將型態轉換為int即可。
注意 Math.random() 是不包含右邊界,
因此最大的亂數值為 10.999...,
而int會無條件捨去小數點後的數字,就得到 [0..10] 範圍的亂數了。
import java.lang.Math; int randomNum = (int)(Math.random()*11);
(2) 產生 [1..10] 的亂數 ( 1 ≦ randomNum ≦ 10 )
將 Math.random() 乘以10之後,再加上1,
產生 1.0 ≦ Math.random() < 11.0 的亂數範圍,
最後將型態轉換為int。
int randomNum = (int)(Math.random()*10+1);
(3) 產生 [100..200] 的亂數 ( 100 ≦ randomNum ≦ 200 )
範圍內總共有101個數字,(200-100+1=101)
因此可以將 Math.random() 乘以範圍內亂數個數(101),
產生 0.0 ≦ Math.random() < 101.0 的亂數範圍,
再加上base(100),最後得到 100.0 ≦ Math.random() < 201.0 的亂數範圍。
int randomNum = (int)(Math.random()*(200-100+1)+100);
(4) 通式: 產生 [m..n] 的亂數 ( m ≦ randomNum ≦ n)
Math.random()*(範圍個數)+第一個數字
=> Math.random()*(n-m+1)+m
注意以上例子都是有包含右邊界,
如果不包含右邊界,就不用+1。
沒有留言:
張貼留言