Java随机数
在實(shí)際開(kāi)發(fā)中產(chǎn)生隨機(jī)數(shù)的使用是很普遍的,所以在程序中進(jìn)行產(chǎn)生隨機(jī)數(shù)操作很重要。在Java中主要提供兩種方式產(chǎn)生隨機(jī)數(shù),分別為調(diào)用Math類(lèi)的random()方法和Random類(lèi)提供的產(chǎn)生各種數(shù)據(jù)類(lèi)型隨機(jī)數(shù)的方法。
1、Math.random()方法
在Math類(lèi)中存在一個(gè)random()方法,用于產(chǎn)生隨機(jī)數(shù)字,這個(gè)方法默認(rèn)生成大于等于0.0小于1.0的double型隨機(jī)數(shù),即0<=Math.random()<1.0,雖然Math.random()方法只可以產(chǎn)生0~1之間的double型數(shù)字,其實(shí)只要在Math.random()語(yǔ)句上稍加處理,就可以使用這個(gè)方法產(chǎn)生任意范圍的隨機(jī)數(shù)。
公式:(數(shù)據(jù)類(lèi)型)(最小值+Math.random()*(最大值-最小值+1))
上述公式為產(chǎn)生的隨機(jī)數(shù),范圍包含最小值與最大值。
1.1 生成隨機(jī)整數(shù)
/*** 生成隨機(jī)整數(shù)(包含起始與終止范圍)* * @author pan_junbiao* @param num1 起始范圍參數(shù)* @param num2 終止范圍參數(shù)* @return 隨機(jī)整數(shù)*/ public static int GetRandomNum(int num1, int num2) {int result = (int) (num1 + Math.random() * (num2 - num1 + 1));return result; }public static void main(String args[]) {// 生成100至999的隨機(jī)整數(shù)System.out.println("任意一個(gè)100值999的整數(shù):" + GetRandomNum(100, 999)); }1.2 生成隨機(jī)字符
/*** 生成隨機(jī)字符(包含起始與終止范圍)* * @author pan_junbiao* @param char1 起始范圍參數(shù)* @param char2 終止范圍參數(shù)* @return 隨機(jī)字符*/ public static char GetRandomChar(char char1, char char2) {char result = (char) (char1 + Math.random() * (char2 - char1 + 1));return result; }public static void main(String args[]) {// 獲取a~z之間的隨機(jī)字符System.out.println("任意小寫(xiě)字符:" + GetRandomChar('a', 'z'));// 獲取A~Z之間的隨機(jī)字符System.out.println("任意大寫(xiě)字符:" + GetRandomChar('A', 'Z'));// 獲取0~9之間的隨機(jī)字符System.out.println("0到9任意數(shù)字字符:" + GetRandomChar('0', '9')); }執(zhí)行結(jié)果:
?
2、Random類(lèi)
除了Math類(lèi)中的random()方法可以獲取隨機(jī)數(shù)之外,在Java中還提供了一種可以獲取隨機(jī)數(shù)的方式,那就是java.util.Random類(lèi)。可以通過(guò)實(shí)例化一個(gè)Random對(duì)象創(chuàng)建一個(gè)隨機(jī)數(shù)生成器。
語(yǔ)法如下:
Random r=new Random();
其中,r是指Random對(duì)象。
在Random類(lèi)中提供了獲取各種數(shù)據(jù)類(lèi)型隨機(jī)數(shù)的方法,下面舉例幾個(gè)常用的方法。
| public int nextInt() | 返回一個(gè)隨機(jī)整數(shù)。 |
| public int nextInt(itn) | 返回大于等于0且小于n的隨機(jī)整數(shù)。 |
| public long nextLong() | 返回一個(gè)隨機(jī)長(zhǎng)整型值。 |
| public boolean nextBoolean() | 返回一個(gè)隨機(jī)布爾型值。 |
| public float nextFloat() | 返回一個(gè)隨機(jī)浮點(diǎn)型值。 |
| public double nextDouble() | 返回一個(gè)隨機(jī)雙精度型值。 |
| public double nextGaussian() | 返回一個(gè)概率密度為高斯分布的雙精度值。 |
2.1 生成各種類(lèi)型的隨機(jī)數(shù)
【示例】使用Random對(duì)象生成各種類(lèi)型的隨機(jī)數(shù),并輸出結(jié)果。
import java.util.Random;/*** 使用Random對(duì)象生成各種類(lèi)型的隨機(jī)數(shù)* @author pan_junbiao*/ public class RandomTest {public static void main(String args[]){// 實(shí)例化一個(gè)Random類(lèi)Random r = new Random();// 隨機(jī)產(chǎn)生一個(gè)整數(shù)System.out.println("隨機(jī)產(chǎn)生一個(gè)整數(shù):" + r.nextInt());// 隨機(jī)產(chǎn)生一個(gè)大于等于0且小于10的整數(shù)System.out.println("隨機(jī)產(chǎn)生一個(gè)大于等于0且小于10的整數(shù):" + r.nextInt(10));// 隨機(jī)產(chǎn)生一個(gè)布爾類(lèi)型的值System.out.println("隨機(jī)產(chǎn)生一個(gè)布爾類(lèi)型的值:" + r.nextBoolean());// 隨機(jī)產(chǎn)生一個(gè)雙精度型的值System.out.println("隨機(jī)產(chǎn)生一個(gè)雙精度型的值:" + r.nextDouble());// 隨機(jī)產(chǎn)生一個(gè)浮點(diǎn)型的值System.out.println("隨機(jī)產(chǎn)生一個(gè)浮點(diǎn)型的值:" + r.nextFloat());// 隨機(jī)產(chǎn)生一個(gè)概率密度為高斯分布的雙精度值System.out.println("隨機(jī)產(chǎn)生一個(gè)概率密度為高斯分布的雙精度值:" + r.nextGaussian());} }運(yùn)行結(jié)果:
2.2?生成隨機(jī)字符串
【示例】使用Random對(duì)象隨機(jī)生成字符串。
import java.util.Random;/*** 使用Random對(duì)象隨機(jī)生成字符串* @author pan_junbiao**/ public class RandomString {public static void main(String[] args){System.out.println("隨機(jī)生成6位數(shù)的字符串:" + getRandomString(6));System.out.println("隨機(jī)生成8位數(shù)的字符串:" + getRandomString(8));System.out.println("隨機(jī)生成10位數(shù)的字符串:" + getRandomString(10));}/*** 隨機(jī)生成字符串* @param length 隨機(jī)字符串長(zhǎng)度*/public static String getRandomString(int length){String base = "abcdefghijklmnopqrstuvwxyz0123456789";Random random = new Random();StringBuffer sb = new StringBuffer();for(int i=0; i< length; i++){int number = random.nextInt(base.length());sb.append(base.charAt(number));}return sb.toString();} }執(zhí)行結(jié)果:
總結(jié)