#隨機數#生成指定範圍的隨機數

illustration

撿起丟下一個多月的Java,從新複習書本上的東西,來到隨機數這一部分:
問題:生成指定範圍的隨機數,好比生成[10,20)區間內的隨機整數、生成[0,50]區間內的隨機整數。html

Java內有兩種實現僞隨機數的方法,一種是java.util.Random(須要手動導入),另外一種是Math.randomjava

##1.基於Random類算法

import java.util.Random;

/**
 * Created by Administrator on 2016/11/26.
 */
public class Ram {
	public static void main(String[] args){
		Random b = new Random(20);
		int a = b.nextInt(51);
		while (a != 50){
			a = b.nextInt(51);
			System.out.println(a);
			if (a == 50){
				System.out.println("Hell yeah");
			}
		}
		System.out.println(a);
	}
}

解釋下:在實例化時的20只是做爲一個種子,種子數只是隨機算法的起源數字,和生成的隨機數的區間沒有任何關係,若是沒有指定數字,則使用系統時間做爲種子dom

nextInt或者nextDouble是指定一個數的最大範圍,但不包括這個數,上面的代碼生成的是[0,50]的整數,輸出的僅是爲了方便查看結果函數

##2.基於後者3d

/**
 * Created by Administrator on 2016/11/27.
 */
public class Ram1 {
	public static void main(String[] args){
		int a = (int)(Math.random()*51);
		while (a != 50){
			a = (int)(Math.random()*51);
			System.out.println(a);
			if (a == 50){
				System.out.println(a);
				break;
			}
		}
		System.out.println(a);
	}
}

random()會生成一個[0,1)內的浮點數,若是你想生成[0,50]的整數,你須要在Math.random()後乘51,再進行顯式轉換。若是你想把區間收縮,好比[10,50],你須要在乘41後再加10,這樣,最小的數值就是10,而最大的數值不會超過51,顯式轉換後就會是50code

下面的代碼是用random函數來生成[10,20)裏的隨機數:htm

public class Ram1 {
	public static void main(String[] args){
		for(int i = 0;i < 15;i++){
			int a = (int)(Math.random()*10+10);
			System.out.println(a);
		}
	}
}

輸出的結果:blog

19
19
12
18
10
13
16
18
11
10
10
16
14
15
19

另外一種實現:get

import java.util.Random;

/**
 * Created by Administrator on 2016/11/26.
 */
public class Ram {
	public static void main(String[] args){
		Random b = new Random();
		for(int i = 0;i < 15;i++){
			int a = b.nextInt(10)+10;
			System.out.println(a);
		}
	}
}

兩種方案都至關接近,使用時視狀況選擇吧,就醬

##一篇比較好的參考 隨機數

相關文章
相關標籤/搜索