国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

Java獲取隨機(jī)數(shù)的幾種方法總結(jié)

2019-11-11 06:02:48
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

方法1 (數(shù)據(jù)類型)(最小值+Math.random()*(最大值-最小值+1)) 例:

(int)(1+Math.random()*(10-1+1))

從1到10的int型隨數(shù) 方法2 獲得隨機(jī)數(shù)

for (int i=0;i<30;i++){System.out.PRintln((int)(1+Math.random()*10));}(int)(1+Math.random()*10)

通過(guò)java.Math包的random方法得到1-10的int隨機(jī)數(shù) 公式是:最小值—最大值(整數(shù))的隨機(jī)數(shù) (類型)最小值+Math.random()*最大值 方法3

Random ra =new Random();for (int i=0;i<30;i++){System.out.println(ra.nextInt(10)+1);}

通過(guò)java.util包中的Random類的nextInt方法來(lái)得到1-10的int隨機(jī)數(shù)

生成0到1之間的任意隨機(jī)小數(shù): 生成[0,d)區(qū)間的隨機(jī)小數(shù),d為任意正的小數(shù),則只需要將nextDouble方法的返回值乘以d即可。 [n1,n2] 也就是 ra.nextDouble() * (n2-n1)+n1

java產(chǎn)生隨機(jī)數(shù)的幾種方式 一.在j2se里我們可以使用Math.random()方法來(lái)產(chǎn)生一個(gè)隨機(jī)數(shù),這個(gè)產(chǎn)生的隨機(jī)數(shù)是0-1之間的一個(gè)double,我們可以把他乘以一定的數(shù),比如說(shuō)乘以100,他就是個(gè)100以內(nèi)的隨機(jī),這個(gè)在j2me中沒(méi)有。 二.在java.util這個(gè)包里面提供了一個(gè)Random的類,我們可以新建一個(gè)Random的對(duì)象來(lái)產(chǎn)生隨機(jī)數(shù),他可以產(chǎn)生隨機(jī)整數(shù)、隨機(jī)float、隨機(jī)double,隨機(jī)long,這個(gè)也是我們?cè)趈2me的程序里經(jīng)常用的一個(gè)取隨機(jī)數(shù)的方法。 三.在我們的System類中有一個(gè)currentTimeMillis()方法,這個(gè)方法返回一個(gè)從1970年1月1號(hào)0點(diǎn)0分0秒到目前的一個(gè)毫秒數(shù),返回類型是long,我們可以拿他作為一個(gè)隨機(jī)數(shù),我們可以拿他對(duì)一些數(shù)取模,就可以把他限制在一個(gè)范圍之內(nèi)啦 其實(shí)在Random的默認(rèn)構(gòu)造方法里也是使用上面第三種方法進(jìn)行隨機(jī)數(shù)的產(chǎn)生的

對(duì)于方法二中的Random類有以下說(shuō)明: java.util.Random類有兩種方式構(gòu)建方式:帶種子和不帶種子 不帶種子: 此種方式將會(huì)返回隨機(jī)的數(shù)字,每次運(yùn)行結(jié)果不一樣

public class RandomTest {public static void main(String[] args) {java.util.Random r=new java.util.Random();for(int i=0;i<10;i++){ System.out.println(r.nextInt());}}

帶種子: 此種方式,無(wú)論程序運(yùn)行多少次,返回結(jié)果都是一樣的

public static void main(String[] args) {java.util.Random r=new java.util.Random(10);for(int i=0;i<10;i++){ System.out.println(r.nextInt());}}

兩種方式的差別在于 (1) 首先請(qǐng)打開Java Doc,我們會(huì)看到Random類的說(shuō)明: 此類的實(shí)例用于生成偽隨機(jī)數(shù)流,此類使用 48 位的種子,該種子可以使用線性同余公式對(duì)其進(jìn)行修改(請(qǐng)參閱 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 節(jié))。 如果用相同的種子創(chuàng)建兩個(gè) Random 實(shí)例,則對(duì)每個(gè)實(shí)例進(jìn)行相同的方法調(diào)用序列,它們將生成并返回相同的數(shù)字序列。為了保證實(shí)現(xiàn)這種特性,我們?yōu)轭怰andom指定了特定的算法。為了 Java 代碼的完全可移植性,Java 實(shí)現(xiàn)必須讓類 Random 使用此處所示的所有算法。但是允許 Random 類的子類使用其他算法,只要其符合所有方法的常規(guī)協(xié)定即可。 Java Doc對(duì)Random類已經(jīng)解釋得非常明白,我們的測(cè)試也驗(yàn)證了這一點(diǎn)。 (2) 如果沒(méi)有提供種子數(shù),Random實(shí)例的種子數(shù)將是當(dāng)前時(shí)間的毫秒數(shù),可以通過(guò)System.currentTimeMillis()來(lái)獲得當(dāng)前時(shí)間的毫秒數(shù)。打開JDK的源代碼,我們可以非常明確地看到這一點(diǎn)。

public Random() { this(System.currentTimeMillis()); }

另外: random對(duì)象的nextInt(),nextInt(int n)方法的說(shuō)明: int nextInt() 返回下一個(gè)偽隨機(jī)數(shù),它是此隨機(jī)數(shù)生成器的序列中均勻分布的 int 值。 int nextInt(int n) 返回一個(gè)偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、在 0(包括)和指定值(不包括)之間均勻分布的 int值。 Java隨機(jī)數(shù)總結(jié)   隨機(jī)數(shù)在實(shí)際中使用很廣泛,比如要隨即生成一個(gè)固定長(zhǎng)度的字符串、數(shù)字。或者隨即生成一個(gè)不定長(zhǎng)度的數(shù)字、或者進(jìn)行一個(gè)模擬的隨機(jī)選擇等等。Java提供了最基本的工具,可以幫助開發(fā)者來(lái)實(shí)現(xiàn)這一切。   一、Java隨機(jī)數(shù)的產(chǎn)生方式   在Java中,隨機(jī)數(shù)的概念從廣義上將,有三種。   1、通過(guò)System.currentTimeMillis()來(lái)獲取一個(gè)當(dāng)前時(shí)間毫秒數(shù)的long型數(shù)字。   2、通過(guò)Math.random()返回一個(gè)0到1之間的double值。   3、通過(guò)Random類來(lái)產(chǎn)生一個(gè)隨機(jī)數(shù),這個(gè)是專業(yè)的Random工具類,功能強(qiáng)大。   二、Random類API說(shuō)明   1、Java API說(shuō)明   Random類的實(shí)例用于生成偽隨機(jī)數(shù)流。此類使用 48 位的種子,使用線性同余公式對(duì)其進(jìn)行修改(請(qǐng)參閱 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 節(jié))。   如果用相同的種子創(chuàng)建兩個(gè) Random 實(shí)例,則對(duì)每個(gè)實(shí)例進(jìn)行相同的方法調(diào)用序列,它們將生成并返回相同的數(shù)字序列。為了保證屬性的實(shí)現(xiàn),為類 Random 指定了特定的算法。   很多應(yīng)用程序會(huì)發(fā)現(xiàn) Math 類中的 random 方法更易于使用。   2、方法摘要   Random()   創(chuàng)建一個(gè)新的隨機(jī)數(shù)生成器。   Random(long seed)   使用單個(gè) long 種子創(chuàng)建一個(gè)新隨機(jī)數(shù)生成器: public Random(long seed) { setSeed(seed); } next 方法使用它來(lái)保存隨機(jī)數(shù)生成器的狀態(tài)。   protected int next(int bits)   生成下一個(gè)偽隨機(jī)數(shù)。   boolean nextBoolean()   返回下一個(gè)偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、均勻分布的 boolean 值。   void nextBytes(byte[] bytes)   生成隨機(jī)字節(jié)并將其置于用戶提供的字節(jié)數(shù)組中。   double nextDouble()   返回下一個(gè)偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、在 0.0 和 1.0之間均勻分布的 double 值。   float nextFloat()   返回下一個(gè)偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、在 0.0 和 1.0 之間均勻分布的 float 值。   double nextGaussian()   返回下一個(gè)偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、呈高斯(“正常地”)分布的 double 值,其平均值是 0.0,標(biāo)準(zhǔn)偏差是 1.0。   int nextInt()   返回下一個(gè)偽隨機(jī)數(shù),它是此隨機(jī)數(shù)生成器的序列中均勻分布的 int 值。   int nextInt(int n)   返回一個(gè)偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、在 0(包括)和指定值(不包括)之間均勻分布的 int值。   long nextLong()   返回下一個(gè)偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、均勻分布的 long 值。   void setSeed(long seed)   使用單個(gè) long 種子設(shè)置此隨機(jī)數(shù)生成器的種子。   三、Random類使用說(shuō)明   1、帶種子與不帶種子的區(qū)別Random類使用的根本是策略分帶種子和不帶種子的Random的實(shí)例。   通俗說(shuō),兩者的區(qū)別是:帶種子的,每次運(yùn)行生成的結(jié)果都是一樣的。   不帶種子的,每次運(yùn)行生成的都是隨機(jī)的,沒(méi)有規(guī)律可言。   2、創(chuàng)建不帶種子的Random對(duì)象   Random random = new Random();   3、創(chuàng)建不帶種子的Random對(duì)象有兩種方法:  

 1) Random random = new Random(555L);  2) Random random = new Random();random.setSeed(555L);

  四、測(cè)試   通過(guò)一個(gè)例子說(shuō)明上面的用法  

 import java.util.Random;    public class TestRandomNum {  public static void main(String[] args) {  randomTest();  testNoSeed();  testSeed1();  testSeed2();  }  public static void randomTest() {  System.out.println("--------------test()--------------");  //返回以毫秒為單位的當(dāng)前時(shí)間。  long r1 = System.currentTimeMillis();  //返回帶正號(hào)的 double 值,大于或等于 0.0,小于 1.0。  double r2 = Math.random();  //通過(guò)Random類來(lái)獲取下一個(gè)隨機(jī)的整數(shù)  int r3 = new Random().nextInt();  System.out.println("r1 = " + r1);  System.out.println("r3 = " + r2);  System.out.println("r2 = " + r3);  }  public static void testNoSeed() {  System.out.println("--------------testNoSeed()--------------");  //創(chuàng)建不帶種子的測(cè)試Random對(duì)象  Random random = new Random();  for (int i = 0; i < 3; i++) {  System.out.println(random.nextInt());  }  }  public static void testSeed1() {  System.out.println("--------------testSeed1()--------------");  //創(chuàng)建帶種子的測(cè)試Random對(duì)象  Random random = new Random(555L);  for (int i = 0; i < 3; i++) {  System.out.println(random.nextInt());  }  }  public static void testSeed2() {  System.out.println("--------------testSeed2()--------------");  //創(chuàng)建帶種子的測(cè)試Random對(duì)象  Random random = new Random();  random.setSeed(555L);  for (int i = 0; i < 3; i++) {  System.out.println(random.nextInt());  }  }  }

  運(yùn)行結(jié)果:   ————–test()————–   r1 = 1227108626582   r3 = 0.5324887850155043   r2 = -368083737   ————–testNoSeed()————–   809503475   1585541532   -645134204   ————–testSeed1()————–   -1367481220   292886146   -1462441651   ————–testSeed2()————–   -1367481220   292886146   -1462441651     通過(guò)testSeed1()與testSeed2()方法的結(jié)果可以看到,兩個(gè)打印結(jié)果相同,因?yàn)樗麄兎N子相同,再運(yùn)行一次,結(jié)果還是一樣的,這就是帶種子隨機(jī)數(shù)的特性。   而不帶種子的,每次運(yùn)行結(jié)果都是隨機(jī)的。   五、綜合應(yīng)用   下面通過(guò)最近寫的一個(gè)隨機(jī)數(shù)工具類來(lái)展示用法:   

import java.util.Random;    public class RandomUtils {  public static final String allChar = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";  public static final String letterChar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";  public static final String numberChar = "0123456789";    public static String generateString(int length) {  StringBuffer sb = new StringBuffer();  Random random = new Random();  for (int i = 0; i < length; i++) {  sb.append(allChar.charAt(random.nextInt(allChar.length())));  }  return sb.toString();  }    public static String generateMixString(int length) {  StringBuffer sb = new StringBuffer();  Random random = new Random();  for (int i = 0; i < length; i++) {  sb.append(allChar.charAt(random.nextInt(letterChar.length())));  }  return sb.toString();  }    public static String generateLowerString(int length) {  return generateMixString(length).toLowerCase();  }    public static String generateUpperString(int length) {  return generateMixString(length).toUpperCase();  }    public static String generateZeroString(int length) {  StringBuffer sb = new StringBuffer();  for (int i = 0; i < length; i++) {  sb.append('0');  }  return sb.toString();  }    public static String toFixdLengthString(long num, int fixdlenth) {  StringBuffer sb = new StringBuffer();  String strNum = String.valueOf(num);  if (fixdlenth - strNum.length() >= 0) {  sb.append(generateZeroString(fixdlenth - strNum.length()));  } else {  throw new RuntimeException("將數(shù)字" + num + "轉(zhuǎn)化為長(zhǎng)度為" + fixdlenth + "的字符串發(fā)生異常!");  }  sb.append(strNum);  return sb.toString();  }    public static String toFixdLengthString(int num, int fixdlenth) {  StringBuffer sb = new StringBuffer();  String strNum = String.valueOf(num);  if (fixdlenth - strNum.length() >= 0) {  sb.append(generateZeroString(fixdlenth - strNum.length()));  } else {  throw new RuntimeException("將數(shù)字" + num + "轉(zhuǎn)化為長(zhǎng)度為" + fixdlenth + "的字符串發(fā)生異常!");  }  sb.append(strNum);  return sb.toString();  }  public static void main(String[] args) {  System.out.println(generateString(15));  System.out.println(generateMixString(15));  System.out.println(generateLowerString(15));  System.out.println(generateUpperString(15));  System.out.println(generateZeroString(15));  System.out.println(toFixdLengthString(123, 15));  System.out.println(toFixdLengthString(123L, 15));  }  }

  運(yùn)行結(jié)果:   vWMBPiNbzfGCpHG   23hyraHdJkKPwMv   tigowetbwkm1nde   BPZ1KNEJPHB115N   000000000000000   000000000000123   000000000000123      六、總結(jié)   1、隨機(jī)數(shù)很常用,在Java有三種產(chǎn)生方式,以Random隨機(jī)數(shù)的使用最為復(fù)雜。   2、Random類對(duì)象有是否帶種子之分,帶種子的只要種子相同,多次運(yùn)行,生成隨機(jī)數(shù)的結(jié)果總是那樣。   3、帶種子隨機(jī)數(shù)的帶種子的對(duì)象創(chuàng)建方式有兩種,效果一樣。但是帶種子的隨機(jī)數(shù)用處似乎不大。   4、Random的功能涵蓋了Math.random()的功能。   5、可以通過(guò)隨機(jī)數(shù)去做實(shí)現(xiàn)隨機(jī)字符串等復(fù)雜的隨機(jī)數(shù)據(jù)。   6、不要研究不重復(fù)的隨機(jī)數(shù),意義不大。 在Java 中我們可以使用java.util.Random類來(lái)產(chǎn)生一個(gè)隨機(jī)數(shù)發(fā)生器。它有兩種形式的構(gòu)造函數(shù),分別是Random()和Random(long seed)。Random()使用當(dāng)前時(shí)間即System.currentTimeMillis()作為發(fā)生器的種子,Random(long seed)使用指定的seed作為發(fā)生器的種子。

隨機(jī)數(shù)發(fā)生器(Random)對(duì)象產(chǎn)生以后,通過(guò)調(diào)用不同的method:nextInt()、nextLong()、nextFloat()、nextDouble()等獲得不同類型隨機(jī)數(shù)。 1>生成隨機(jī)數(shù) Random random = new Random(); Random random = new Random(100);//指定種子數(shù)100 random調(diào)用不同的方法,獲得隨機(jī)數(shù)。 如果2個(gè)Random對(duì)象使用相同的種子(比如都是100),并且以相同的順序調(diào)用相同的函數(shù),那它們返回值完全相同。如下面代碼中兩個(gè)Random對(duì)象的輸出完全相同 import java.util.*; class TestRandom { public static void main(String[] args) { Random random1 = new Random(100); System.out.println(random1.nextInt()); System.out.println(random1.nextFloat()); System.out.println(random1.nextBoolean()); Random random2 = new Random(100); System.out.println(random2.nextInt()); System.out.println(random2.nextFloat()); System.out.println(random2.nextBoolean()); } } 2>指定范圍內(nèi)的隨機(jī)數(shù) 隨機(jī)數(shù)控制在某個(gè)范圍內(nèi),使用模數(shù)運(yùn)算符% import java.util.*; class TestRandom { public static void main(String[] args) { Random random = new Random(); for(int i = 0; i < 10;i++) { System.out.println(Math.abs(random.nextInt())); } } } 獲得的隨機(jī)數(shù)有正有負(fù)的,用Math.abs使獲取數(shù)據(jù)范圍為非負(fù)數(shù) 3>獲取指定范圍內(nèi)的不重復(fù)隨機(jī)數(shù) import java.util.*; class TestRandom { public static void main(String[] args) { int[] intRet = new int[6]; int intRd = 0; //存放隨機(jī)數(shù) int count = 0; //記錄生成的隨機(jī)數(shù)個(gè)數(shù) int flag = 0; //是否已經(jīng)生成過(guò)標(biāo)志 while(count<6){ Random rdm = new Random(System.currentTimeMillis()); intRd = Math.abs(rdm.nextInt())2+1; for(int i=0;i<count;i++){ if(intRet[i]==intRd){ flag = 1; break; }else{ flag = 0; } } if(flag==0){ intRet[count] = intRd; count++; } } for(int t=0;t<6;t++){ System.out.println(t+"->"+intRet[t]); } } }

Java中的隨機(jī)數(shù)是否可以重復(fù)?Java中產(chǎn)生的隨機(jī)數(shù)能否可以用來(lái)產(chǎn)生數(shù)據(jù)庫(kù)主鍵?帶著這個(gè)問(wèn)題,我們做了一系列測(cè)試。 1.測(cè)試一: 使用不帶參數(shù)的Random()構(gòu)造函數(shù)

public class RandomTest {public static void main(String[] args) { java.util.Random r=new java.util.Random(); for(int i=0;i<10;i++){ System.out.println(r.nextInt()); }}}

程序運(yùn)行結(jié)果: -1761145445 -1070533012 216216989 -910884656 -1408725314 -1091802870 1681403823 -1099867456 347034376 -1277853157

再次運(yùn)行該程序: -169416241 220377062 -1140589550 -1364404766 -1088116756 2134626361 -546049728 1132916742 -1522319721 1787867608

從上面的測(cè)試我們可以看出,使用不帶參數(shù)的Random()構(gòu)造函數(shù)產(chǎn)生的隨機(jī)數(shù)不會(huì)重復(fù)。那么,什么情況下Java會(huì)產(chǎn)生重復(fù)的隨機(jī)數(shù)呢?且看下面的測(cè)試。測(cè)試二:為Random設(shè)置種子數(shù)public class RandomTest_Repeat { public static void main(String[] args) { java.util.Random r=new java.util.Random(10); for(int i=0;i<10;i++){ System.out.println(r.nextInt()); } }}

無(wú)論程序運(yùn)行多少次,其結(jié)果總是: -1157793070 1913984760 1107254586 1773446580 254270492 -1408064384 1048475594 1581279777 -778209333 1532292428

甚至在不同的機(jī)器上測(cè)試,測(cè)試結(jié)果也不會(huì)改變!

3.原因分析: (1) 首先請(qǐng)打開Java Doc,我們會(huì)看到Random類的說(shuō)明: 此類的實(shí)例用于生成偽隨機(jī)數(shù)流,此類使用 48 位的種子,該種子可以使用線性同余公式對(duì)其進(jìn)行修改(請(qǐng)參閱 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 節(jié))。 如果用相同的種子創(chuàng)建兩個(gè) Random 實(shí)例,則對(duì)每個(gè)實(shí)例進(jìn)行相同的方法調(diào)用序列,它們將生成并返回相同的數(shù)字序列。為了保證實(shí)現(xiàn)這種特性,我們?yōu)轭怰andom指定了特定的算法。為了 Java 代碼的完全可移植性,Java 實(shí)現(xiàn)必須讓類 Random 使用此處所示的所有算法。但是允許 Random 類的子類使用其他算法,只要其符合所有方法的常規(guī)協(xié)定即可。 Java Doc對(duì)Random類已經(jīng)解釋得非常明白,我們的測(cè)試也驗(yàn)證了這一點(diǎn)。

(2) 如果沒(méi)有提供種子數(shù),Random實(shí)例的種子數(shù)將是當(dāng)前時(shí)間的毫秒數(shù),可以通過(guò)System.currentTimeMillis()來(lái)獲得當(dāng)前時(shí)間的毫秒數(shù)。打開JDK的源代碼,我們可以非常明確地看到這一點(diǎn)。

public Random() { this(System.currentTimeMillis()); }結(jié)論: 通過(guò)上面的測(cè)試和分析,我們會(huì)對(duì)Random類有較為深刻的理解。同時(shí),我覺(jué)得,通過(guò)閱讀Java Doc的API文檔,可以很好地提高我們的Java編程能力,做到“知其然”;一旦遇到費(fèi)解的問(wèn)題,不妨打開Java的源代碼,這樣我們就能做到“知其所以然”。

java中一般有兩種隨機(jī)數(shù),一個(gè)是Math中random()方法,一個(gè)是Random類。

一、Math.random()隨即生成0<x<1的小數(shù)。實(shí)例:如何寫,生成隨機(jī)生成出0~100中的其中一個(gè)數(shù)呢? Math.random()返回的只是從0到1之間的小數(shù),如果要50到100,就先放大50倍,即0到50之間,這里還是小數(shù),如果要整數(shù),就強(qiáng)制轉(zhuǎn)換int,然后再加上50即為50~100.最終代碼:(int)(Math.random()*50) + 50

二、Random類 Random random = new Random();//默認(rèn)構(gòu)造方法 Random random = new Random(1000);//指定種子數(shù)字 在進(jìn)行隨機(jī)時(shí),隨機(jī)算法的起源數(shù)字稱為種子數(shù)(seed),在種子數(shù)的基礎(chǔ)上進(jìn)行一定的變換,從而產(chǎn)生需要的隨機(jī)數(shù)字。 相同種子數(shù)的Random對(duì)象,相同次數(shù)生成的隨機(jī)數(shù)字是完全相同的。也就是說(shuō),兩個(gè)種子數(shù)相同的Random對(duì)象,第一次生成的隨機(jī)數(shù)字完全相同,第二次生成的隨機(jī)數(shù)字也完全相同。

2 、Random類中的常用方法 Random 類中的方法比較簡(jiǎn)單,每個(gè)方法的功能也很容易理解。需要說(shuō)明的是,Random類中各方法生成的隨機(jī)數(shù)字都是均勻分布的,也就是說(shuō)區(qū)間內(nèi)部的數(shù)字生成的幾率是均等的。下面對(duì)這些方法做一下基本的介紹: a 、public boolean nextBoolean() 該方法的作用是生成一個(gè)隨機(jī)的boolean值,生成true和false的值幾率相等,也就是都是50%的幾率。 b 、public double nextDouble() 該方法的作用是生成一個(gè)隨機(jī)的double值,數(shù)值介于[0,1.0)之間,這里中括號(hào)代表包含區(qū)間端點(diǎn),小括號(hào)代表不包含區(qū)間端點(diǎn),也就是0到1之間的隨機(jī)小數(shù),包含0而不包含1.0。

c 、public int nextInt() 該方法的作用是生成一個(gè)隨機(jī)的int值,該值介于int的區(qū)間,也就是-2的31次方到2的31次方-1之間。 如果需要生成指定區(qū)間的int值,則需要進(jìn)行一定的數(shù)學(xué)變換,具體可以參看下面的使用示例中的代碼。 d 、public int nextInt(int n) 該方法的作用是生成一個(gè)隨機(jī)的int值,該值介于[0,n)的區(qū)間,也就是0到n之間的隨機(jī)int值,包含0而不包含n。 如果想生成指定區(qū)間的int值,也需要進(jìn)行一定的數(shù)學(xué)變換,具體可以參看下面的使用示例中的代碼。 e 、public void setSeed(long seed) 該方法的作用是重新設(shè)置Random對(duì)象中的種子數(shù)。設(shè)置完種子數(shù)以后的Random對(duì)象和相同種子數(shù)使用new關(guān)鍵字創(chuàng)建出的Random對(duì)象相同。 3 、Random類使用示例 使用Random類,一般是生成指定區(qū)間的隨機(jī)數(shù)字,下面就一一介紹如何生成對(duì)應(yīng)區(qū)間的隨機(jī)數(shù)字。以下生成隨機(jī)數(shù)的代碼均使用以下Random對(duì)象r進(jìn)行生成: Random r = new Random(); a 、生成[0,1.0)區(qū)間的小數(shù) double d1 = r.nextDouble(); 直接使用nextDouble方法獲得。 b、生成[0,5.0)區(qū)間的小數(shù) double d2 = r.nextDouble() * 5; 因?yàn)閚extDouble方法生成的數(shù)字區(qū)間是[0,1.0),將該區(qū)間擴(kuò)大5倍即是要求的區(qū)間。

同理,生成[0,d)區(qū)間的隨機(jī)小數(shù),d為任意正的小數(shù),則只需要將nextDouble方法的返回值乘以d即可。 c、生成[1,2.5)區(qū)間的小數(shù) [n1,n2] double d3 = r.nextDouble() * 1.5 + 1;【也就是 r.nextDouble() * (n2-n1)+n1】 生成[1,2.5)區(qū)間的隨機(jī)小數(shù),則只需要首先生成[0,1.5)區(qū)間的隨機(jī)數(shù)字,然后將生成的隨機(jī)數(shù)區(qū)間加1即可。 同理,生成任意非從0開始的小數(shù)區(qū)間[d1,d2)范圍的隨機(jī)數(shù)字(其中d1不等于0),則只需要首先生成[0,d2-d1)區(qū)間的隨機(jī)數(shù)字,然后將生成的隨機(jī)數(shù)字區(qū)間加上d1即可。 d、生成任意整數(shù) int n1 = r.nextInt(); 直接使用nextInt方法即可。 e、生成[0,10)區(qū)間的整數(shù) int n2 = r.nextInt(10); n2 = Math.abs(r.nextInt() % 10); 以上兩行代碼均可生成[0,10)區(qū)間的整數(shù)。 第一種實(shí)現(xiàn)使用Random類中的nextInt(int n)方法直接實(shí)現(xiàn)。 第二種實(shí)現(xiàn)中,首先調(diào)用nextInt()方法生成一個(gè)任意的int數(shù)字,該數(shù)字和10取余以后生成的數(shù)字區(qū)間為(-10,10),因?yàn)榘凑諗?shù)學(xué)上的規(guī)定余數(shù)的絕對(duì)值小于除數(shù),然后再對(duì)該區(qū)間求絕對(duì)值,則得到的區(qū)間就是[0,10)了。 同理,生成任意[0,n)區(qū)間的隨機(jī)整數(shù),都可以使用如下代碼: int n2 = r.nextInt(n); n2 = Math.abs(r.nextInt() % n); f、生成[0,10]區(qū)間的整數(shù) int n3 = r.nextInt(11); n3 = Math.abs(r.nextInt() % 11); 相對(duì)于整數(shù)區(qū)間,[0,10]區(qū)間和[0,11)區(qū)間等價(jià),所以即生成[0,11)區(qū)間的整數(shù)。 g、生成[-3,15)區(qū)間的整數(shù) int n4 = r.nextInt(18) - 3; 【也就是 r.nextInt() * (n2-n1)+n1】 n1是個(gè)負(fù)數(shù) n4 = Math.abs(r.nextInt() % 18) - 3; 生成非從0開始區(qū)間的隨機(jī)整數(shù),可以參看上面非從0開始的小數(shù)區(qū)間實(shí)現(xiàn)原理的說(shuō)明。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 揭东县| 尤溪县| 武宁县| 深州市| 永修县| 那曲县| 莎车县| 永兴县| 嘉义县| 齐齐哈尔市| 陆丰市| 兴城市| 桐柏县| 安溪县| 新乡市| 桂平市| 北流市| 博罗县| 仁布县| 咸宁市| 邹平县| 娄烦县| 榆林市| 洪湖市| 曲沃县| 广宗县| 阿合奇县| 北辰区| 海宁市| 会东县| 右玉县| 宿松县| 莱阳市| 宁津县| 丹棱县| 赣州市| 明星| 洮南市| 美姑县| 东乡县| 剑河县|