java Random類
阿新 • • 發佈:2018-11-19
Random類 java.util.Random
Random類可以生成隨機數,偽隨機是因為它產生的隨機數是通過演算法產生的
兩個構造方法
Random()建立一個隨機數生成器物件,無參
public Random(long seed) 使用單個 long 種子建立一個新的隨機數生成器,,使用帶seed的構造方法,如果seed一樣,那麼只要呼叫next的次數相同,產生的值就是相同的
常用方法
nextInt() 隨機返回一個int型整數
nextInt(int bound),隨機返回一個值在[0,bound)的int型別的整數,包括0不包括bound
nextFloat()隨機返回一個值在[0,1)之間的float型別的資料
nextDouble()隨機返回一個在[0,1)之間的double型別的資料
import java.util.Random; public class RandomTest { public static void main(String[] args) { Random r1 = new Random(); // 隨機生成一個int型整數 System.out.println(r1.nextInt()); for (int i = 0; i < 5; i++) { // 隨機生成一個[0,4)的整數 System.out.println(r1.nextInt(4)); //隨機生成一個[0,1)的float數 System.out.println(r1.nextFloat()); //隨機生成一個[0,1)的double數 System.out.println(r1.nextDouble()); } } }
例子
模擬雙色球生成
1
/** * 完成一個彩票機選號碼生成器,這裡以雙色球為例, * 雙色球每注中獎號碼由6個不同的紅色球號碼和1個藍色球號碼組成。 * 紅色球號碼從1~33中選擇;藍色球號碼從1~16中選擇。 * @author fuyu * */ import java.util.Arrays; import java.util.Random; public class RandomTest01 { public static void main(String[] args) { int[] a = color2Balls(); for (int i : a) { System.out.print(i + ","); } } public static int[] color2Balls() { int[] arr = new int[7]; Random r = new Random(); int i = 0;// 定義指標 while (true) { // 生成紅球數字,加1是因為Random類的nextInt(int bound)方法生成[0,bound)之間的數 int red = r.nextInt(33) + 1; // 判斷紅球是否在陣列中出現過, boolean Isin = inArrays(arr, red); // 如果紅球沒在陣列中出現過 if (!Isin) { // 將紅球的數字傳入陣列,指標往後移 arr[i] = red; i++; } if (i == 6) { // 如果i==6,說明陣列中的前6個元素已經選擇完畢,對前六個元素排序 Arrays.sort(arr, 0, 6); // 生成籃球 arr[i] = r.nextInt(16) + 1; // 跳出迴圈 break; } } return arr; } public static boolean inArrays(int[] arr, int i) { // 判斷某個元素是否在陣列中,在,返回true,不在,返回false for (int j : arr) { if (j == i) { return true; } } return false; } }
2
import java.util.Arrays;
import java.util.Random;
/*
*
* 完成一個彩票機選號碼生成器,這裡以雙色球為例
* ,雙色球每注中獎號碼由6個不同的紅色球號碼和1個藍色球號碼組成。
* 紅色球號碼從1~33中選擇;藍色球號碼從1~16中選擇。
*/
public class RandomTest02 {
public static void main(String[] args) {
color2Balls();
}
public static void color2Balls() {
//建立一個長33的號碼陣列,存放從1-33的整數
int[] balls = new int[33];
for (int i = 0; i < balls.length; i++) {
balls[i] = i + 1;
}
// 建立陣列來標記紅球是否重複
boolean[] isUsed = new boolean[33];
//定義result長為6的結果陣列來儲存紅球結果
int results[] = new int[6];
//定義指標,即陣列下標
int i = 0;
Random random = new Random();
while (true) {
//生成從0到32的隨機數
int red = random.nextInt(33);
//如果這個隨機數之出現過
if (isUsed[red] == true) {
//重新執行while迴圈
continue;
}
//如果這個隨機數沒出現過,將隨機數作為號碼陣列下標,從號碼陣列中取出這個球放入到結果陣列
results[i] = balls[red];
//結果陣列的下標往後移動
i++;
//如果結果陣列的下標為6說明結果陣列已經選取完畢,退出迴圈
if (i == 6) {
break;
}
//將標記陣列的隨機數位置上的值置true,標記這個號碼已經選取過了
isUsed[red] = true;
}
//對結果陣列排序,得到紅球結果
Arrays.sort(results);
//隨機生成下標數字,從號碼陣列中取出該號碼,即是藍球結果
int blue = random.nextInt(16);
System.out.println("紅球");
for (int j : results) {
System.out.print(j + ",");
}
System.out.println();
System.out.println("藍球");
System.out.println(balls[blue]);
}
}