1. 程式人生 > >java Random類

java Random類

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]);
	}
}

參考:http://www.monkey1024.com/javase/517