亂數
Math.random()
預設產生0到0.999999(不包含1)之間的亂數,0 <= 數字 <= 0.999999,不包含整數1。
1
2
3
4
// 產生10個亂數
for (int i = 0; i < 10; i++) {
System.out.println(Math.random());
}
0.6626947146950831
0.8865498402906333
0.9527716033115488
0.4059555335297955
0.24287815701814686
0.10780772812143591
0.005724639017029354
0.41796994366817686
0.8392257800190969
0.736425852792078
random()原始碼傳回值是double
random()傳回值是double
1
2
3
public static double random() {
return RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble();
}
強制轉型int
需要使用圓括號包住(計算公式),強制轉型才會把整個(計算公式)的結果轉成int。
1
2
3
4
// 產生10個亂數
for (int i = 0; i < 10; i++) {
System.out.println((int)(Math.random()));
}
產生亂數
產生0到99亂數
預設產生0到0.999999(不包含1)之間的亂數,把產生的數字乘上100,就會產生0至99.999999的亂數,不包含100。
1
2
3
4
// 產生10個亂數
for (int i = 0; i < 10; i++) {
System.out.println((int)(Math.random() * 100));
}
84
56
74
95
12
9
82
53
0
61
產生0到100亂數
把100 + 1 = 101,產生預設產生0到0.999999(不包含1)之間的亂數,把產生的數字乘上100,就會產生0至100.999999的亂數,不包含101。
1
2
3
4
// 產生10個亂數
for (int i = 0; i < 10; i++) {
System.out.println((int)(Math.random() * 101));
}
產生0到6的亂數。
以下程式碼為何要6 + 1 ?
因為亂數產生的是0到 5.999999,產生的範圍是0 <= x <= 5.999999,不會等於6,所以要加1,加1之後的範圍是0到 6.9999999,0 <= x <= 6.999999,最大不會超過7。
因為random傳回值是double,要使用int強制轉型,int強制轉型只會去掉小數點,不會四捨五入。
1
2
3
4
// 產生10個亂數
for (int i = 0; i < 10; i++) {
System.out.println((int)(Math.random() * (6 + 1)));
}
3
5
3
5
5
4
1
2
0
4
產生10個1到100亂數
注意!是「1」到「100」,不是0到100,跟之前的不一樣。
1.先取得0到99的double。
亂數產生的是0到 99.999999,產生的範圍是0 <= x <= 99.999999,不會等於100
1
2
3
4
// 產生10個亂數
for (int i = 0; i < 10; i++) {
System.out.println(Math.random() * 100);
}
18.117136224378395
69.9176833968274
83.23955274354016
30.601213720220876
74.22605408548534
70.96165488922483
4.101315350235257
28.630693528715057
53.496945037049684
72.62665129052877
2.去掉小數點,把double強制轉成int。
需要使用圓括號包住(計算公式),強制轉型才會把整個(計算公式)的結果轉成int。
1
2
3
for (int i = 0; i < 10; i++) {
System.out.println((int)(Math.random() * 100));
}
2
18
61
35
36
22
18
71
52
21
3.因為求出的數字範圍是0 <= x <= 99,不會等於100。
只要加上1,範圍就會在「1」 <= x <= 100,1到100之間。
1
2
3
for (int i = 0; i < 10; i++) {
System.out.println((int)(Math.random() * 100) + 1);
}
13
65
100
29
53
65
6
36
16
78
產生2到7之間的亂數
原本的Math.random()只會產生0到x的數字。
1.要產生2到7的亂數,要先產生0到5的亂數,再加上2,才會符合2到7的亂數。
7 - 2 = 5
以下產生0到4.99999的亂數,不包含5。
1
Math.random() * (7 - 2)
2.但0到5的亂數,只會產生0到4.99999的亂數,所以要再 + 1,這樣才會產生0到5.999999的亂數,不包含6。
5 + 1 = 6
1
Math.random() * (7 - 2 + 1)
3.使用強制轉型int,無條件去掉小數點。
需要使用圓括號包住(計算公式),強制轉型才會把整個(計算公式)的結果轉成int。
以下程式碼產生0到5的整數亂數。
1
(int)(Math.random() * (7 - 2 + 1))
4.題目要求產生2到7的亂數。
把求出0到5的任意一個亂數,加上2,亂數範圍就會在2到7。
1
(int)(Math.random() * (7 - 2 + 1)) + 2
程式碼
1
2
3
for (int i = 0; i < 10; i++) {
System.out.println((int)(Math.random() * (7 - 2 + 1)) + 2);
}
3
3
3
7
7
2
3
3
2
3