1. วิธีสร้างตัวเลขสุ่ม Java
ในชวามีสามแนวคิดทั่วไปของตัวเลขสุ่ม
1. ใช้ System.currentTimeMillis () เพื่อรับจำนวนมิลลิวินาทีในเวลายาว ๆ
2. ส่งคืนค่าสองเท่าระหว่าง 0 และ 1 ผ่านทางคณิตศาสตร์ random ()
3. สร้างหมายเลขสุ่มผ่านคลาสสุ่ม
2. คำอธิบาย API แบบสุ่ม
1. คำอธิบาย Java API
อินสแตนซ์ของคลาสแบบสุ่มใช้เพื่อสร้างสตรีมหมายเลขเทียม คลาสนี้ใช้เมล็ด 48 บิตและแก้ไขโดยใช้สูตรความสอดคล้องเชิงเส้น (ดูการเขียนโปรแกรมศิลปะคอมพิวเตอร์ของโดนัลด์ Knuth เล่มที่ 2 ส่วนที่ 3.2.1)
หากมีการสร้างอินสแตนซ์แบบสุ่มสองรายการด้วยเมล็ดเดียวกันการเรียกวิธีการเรียกวิธีการแบบเดียวกันกับแต่ละอินสแตนซ์และพวกเขาจะสร้างและส่งกลับลำดับของตัวเลขเดียวกัน เพื่อให้แน่ใจว่าการใช้แอตทริบิวต์จะมีการระบุอัลกอริทึมเฉพาะสำหรับการสุ่มคลาส
แอปพลิเคชันจำนวนมากจะพบวิธีการสุ่มในคลาสคณิตศาสตร์ใช้งานง่ายขึ้น
2. วิธีการสรุปวิธี
สุ่ม ()
สร้างเครื่องกำเนิดหมายเลขสุ่มใหม่
สุ่ม (เมล็ดยาว)
สร้างเครื่องกำเนิดหมายเลขสุ่มใหม่โดยใช้เมล็ดยาวเดี่ยว:
การสุ่มสาธารณะ (เมล็ดยาว) {setseed (เมล็ด);} วิธีต่อไปใช้เพื่อบันทึกสถานะของเครื่องกำเนิดตัวเลขสุ่ม
ได้รับการป้องกัน int ถัดไป (int bits)
สร้างหมายเลขสุ่มหลอกถัดไป
บูลีน NextBoolean ()
ส่งคืนหมายเลขหลอกหลอกถัดไปซึ่งเป็นค่าบูลีนแบบกระจายอย่างสม่ำเสมอที่นำมาจากลำดับของเครื่องกำเนิดหมายเลขสุ่มนี้
เป็นโมฆะ nextbytes (ไบต์ [] ไบต์)
สร้างไบต์แบบสุ่มและวางไว้ในอาร์เรย์ไบต์ที่ผู้ใช้จัดหา
double nextdouble ()
ส่งคืนหมายเลขหลอกหลอกถัดไปซึ่งเป็นค่าสองเท่ากระจายอย่างเท่าเทียมกันระหว่าง 0.0 และ 1.0 นำมาจากลำดับของเครื่องกำเนิดตัวเลขสุ่มนี้
ลอย nextfloat ()
ส่งคืนหมายเลขสุ่มหลอกถัดไปซึ่งเป็นค่าลอยตัวอย่างเท่าเทียมกันระหว่าง 0.0 และ 1.0 นำมาจากลำดับของเครื่องกำเนิดตัวเลขสุ่มนี้
Nextgaussian สองครั้ง ()
ส่งคืนหมายเลขหลอกหลอกถัดไปซึ่งเป็นการกระจายแบบเกาส์ ("ปกติ") ที่นำมาจากลำดับของเครื่องกำเนิดตัวเลขสุ่มนี้โดยเฉลี่ย 0.0 และค่าเบี่ยงเบนมาตรฐาน 1.0
int nextint ()
ส่งคืนหมายเลขสุ่มหลอกถัดไปซึ่งเป็นค่า INT ที่กระจายอย่างสม่ำเสมอในลำดับของเครื่องกำเนิดหมายเลขสุ่มนี้
int nextint (int n)
ส่งคืนหมายเลขหลอกหลอกซึ่งเป็นค่า int ที่กระจายอย่างสม่ำเสมอระหว่าง 0 (รวม) และค่าที่ระบุ (ไม่รวม) ที่นำมาจากลำดับของเครื่องกำเนิดหมายเลขสุ่มนี้
ยาวถัดไป ()
ส่งคืนหมายเลขหลอกหลอกถัดไปซึ่งเป็นค่ายาวที่กระจายอย่างสม่ำเสมอที่นำมาจากลำดับของเครื่องกำเนิดตัวเลขสุ่มนี้
เป็นโมฆะ setseed (เมล็ดยาว)
ตั้งค่าเมล็ดของเครื่องกำเนิดตัวเลขสุ่มนี้โดยใช้เมล็ดยาวเดี่ยว
3. คำแนะนำการใช้งานชั้นเรียนแบบสุ่ม
1. ความแตกต่างระหว่างการบรรทุกเมล็ดและไม่ถือเมล็ด
การใช้พื้นฐานของคลาสแบบสุ่มคือการแบ่งอินสแตนซ์ของการสุ่มด้วยเมล็ดและไม่มีเมล็ด
ในแง่ของคนธรรมดาความแตกต่างระหว่างทั้งสองคือ:
สำหรับเมล็ดผลลัพธ์ที่เกิดจากการวิ่งแต่ละครั้งจะเหมือนกัน
หากคุณไม่มีเมล็ดสิ่งที่คุณสร้างขึ้นจะสุ่มทุกครั้งที่คุณวิ่งและไม่มีรูปแบบเลย
2. สร้างวัตถุสุ่มโดยไม่มีเมล็ด
สุ่มสุ่ม = ใหม่สุ่ม ();
3. สร้างวัตถุสุ่มโดยไม่มีเมล็ด
มีสองวิธี:
1) สุ่มสุ่ม = สุ่มใหม่ (555L);
2) สุ่มสุ่ม = ใหม่สุ่ม ();
Random.setseed (555L);
4. แอปพลิเคชันที่ครอบคลุม
ต่อไปนี้เป็นคลาสเครื่องมือหมายเลขสุ่มที่เขียนเมื่อเร็ว ๆ นี้เพื่อแสดงการใช้งาน:
การคัดลอกรหัสมีดังนี้:
นำเข้า java.util.random;
-
* หมายเลขสุ่มเครื่องมือสตริง
* ผู้ใช้: leizhimin
* วันที่: 2008-11-19 9:43:09
-
คลาสสาธารณะแบบสุ่ม {
สตริงสุดท้ายคงที่ allchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ";
สาธารณะคงที่สตริงสุดท้าย retingchar = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
public Static Final String NumberChar = "0123456789";
-
* ส่งคืนสตริงสุ่มความยาวคงที่ (รวมถึงตัวอักษรและตัวเลขตัวพิมพ์เล็กบนและล่างเท่านั้น)
-
* @param ความยาวสตริงแบบสุ่มความยาว
* @return สตริงสุ่ม
-
String String สาธารณะ Generatestring (ความยาว int) {
StringBuffer sb = new StringBuffer ();
สุ่มสุ่ม = ใหม่สุ่ม ();
สำหรับ (int i = 0; i <length; i ++) {
sb.append (allchar.charat (random.nextint (allchar.length ())));
-
ส่งคืน sb.toString ();
-
-
* ส่งคืนสตริงตัวอักษรบริสุทธิ์แบบสุ่มแบบยาวคงที่ (รวมถึงตัวอักษรตัวพิมพ์เล็กบนและล่างเท่านั้น)
-
* @param ความยาวสตริงแบบสุ่มความยาว
* @return สตริงสุ่ม
-
String String สาธารณะ GenerateMixString (ความยาว int) {
StringBuffer sb = new StringBuffer ();
สุ่มสุ่ม = ใหม่สุ่ม ();
สำหรับ (int i = 0; i <length; i ++) {
sb.append (allchar.charat (random.nextint (letterchar.length ())));
-
ส่งคืน sb.toString ();
-
-
* ส่งคืนสตริงตัวอักษรบริสุทธิ์แบบสุ่มยาวคงที่ (รวมถึงตัวอักษรตัวพิมพ์ใหญ่เท่านั้น)
-
* @param ความยาวสตริงแบบสุ่มความยาว
* @return สตริงสุ่ม
-
String String สาธารณะ GenerateLowerString (ความยาว int) {
return generateMixString (ความยาว) .ToLowerCase ();
-
-
* ส่งคืนสตริงตัวพิมพ์เล็กที่มีความยาวแบบสุ่มแบบคงที่ (รวมถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็กเท่านั้น)
-
* @param ความยาวสตริงแบบสุ่มความยาว
* @return สตริงสุ่ม
-
สตริงคงที่สาธารณะ generateupperstring (ความยาว int) {
return generatemixstring (ความยาว) .touppercase ();
-
-
* สร้างสตริง 0 ความยาวคงที่คงที่
-
* @param ความยาวสตริงความยาว
* @return Pure 0 String
-
สตริงคงที่สาธารณะ generatezerOstring (ความยาว int) {
StringBuffer sb = new StringBuffer ();
สำหรับ (int i = 0; i <length; i ++) {
sb.append ('0');
-
ส่งคืน sb.toString ();
-
-
* สร้างสตริงความยาวคงที่ตามจำนวนความยาวไม่เพียงพอที่จะเพิ่มลงในค์ก่อนหน้า
-
* @param num number
* @param fixdlenth string ความยาว
* @return สตริงความยาวคงที่
-
สตริงคงที่สาธารณะ tofixDlengthString (Long num, int fixdlenth) {
StringBuffer sb = new StringBuffer ();
strnum = string.valueof (num);
if (fixdlenth - strnum.length ()> = 0) {
sb.append (generatezerostring (fixdlenth - strnum.length ()));
} อื่น {
โยน runtimeException ใหม่ ("แปลงหมายเลข" + num + "ไปยังสตริงที่มีความยาว" + fixdlenth + "ข้อยกเว้นเกิดขึ้น!");
-
sb.append (strnum);
ส่งคืน sb.toString ();
-
-
* สร้างสตริงความยาวคงที่ตามจำนวนความยาวไม่เพียงพอที่จะเพิ่มลงในค์ก่อนหน้า
-
* @param num number
* @param fixdlenth string ความยาว
* @return สตริงความยาวคงที่
-
สตริงคงที่สาธารณะ tofixDlengthString (int num, int fixdlenth) {
StringBuffer sb = new StringBuffer ();
strnum = string.valueof (num);
if (fixdlenth - strnum.length ()> = 0) {
sb.append (generatezerostring (fixdlenth - strnum.length ()));
} อื่น {
โยน runtimeException ใหม่ ("แปลงหมายเลข" + num + "ไปยังสตริงที่มีความยาว" + fixdlenth + "ข้อยกเว้นเกิดขึ้น!");
-
sb.append (strnum);
ส่งคืน sb.toString ();
-
โมฆะคงที่สาธารณะหลัก (สตริง [] 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));
-
-
ผลการทำงาน:
VWMBPINBZFGCPHG
23HyraHdjkkpwmv
tigowetbwkm1nde
BPZ1KNEJPHB115N
000000000000000000
00000000000000123
00000000000000123
กระบวนการเสร็จสิ้นด้วยรหัสออก 0
6. สรุป
1. ตัวเลขสุ่มมักใช้กันมาก
2. วัตถุคลาสแบบสุ่มมีความแตกต่างระหว่างที่พวกเขาพกเมล็ด
3. มีสองวิธีในการสร้างวัตถุเมล็ดที่มีตัวเลขสุ่มโดยมีเอฟเฟกต์เดียวกัน แต่ตัวเลขสุ่มที่มีเมล็ดดูเหมือนจะไม่ได้ใช้งานมากนัก
4. ฟังก์ชั่นของแบบสุ่มครอบคลุมฟังก์ชั่นของ Math.random ()
5. คุณสามารถใช้ตัวเลขสุ่มเพื่อใช้ข้อมูลสุ่มที่ซับซ้อนเช่นสตริงแบบสุ่ม
6. อย่าศึกษาตัวเลขสุ่มที่ไม่ทำซ้ำมันไม่ได้มีความหมายมากนัก
รหัสเพิ่มเติม:
การคัดลอกรหัสมีดังนี้:
แพ็คเกจ com.test;
นำเข้า java.util.random;
คลาสสาธารณะแบบสุ่ม {
สตริงสุดท้ายคงที่ allchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ";
public Statis Final String Letterchar = "abcdefghijkllmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
public Static Final String NumberChar = "0123456789";
-
* ส่งคืนสตริงสุ่มความยาวคงที่ (รวมถึงตัวอักษรและตัวเลขตัวพิมพ์เล็กบนและล่างเท่านั้น)
* @param ความยาวสตริงแบบสุ่มความยาว
* @return สตริงสุ่ม
-
String String สาธารณะ Generatestring (ความยาว int)
-
StringBuffer sb = new StringBuffer ();
สุ่มสุ่ม = ใหม่สุ่ม ();
สำหรับ (int i = 0; i <length; i ++) {
sb.append (allchar.charat (random.nextint (allchar.length ())));
-
ส่งคืน sb.toString ();
-
-
* ส่งคืนสตริงตัวอักษรบริสุทธิ์แบบสุ่มแบบยาวคงที่ (รวมถึงตัวอักษรตัวพิมพ์เล็กบนและล่างเท่านั้น)
* @param ความยาวสตริงแบบสุ่มความยาว
* @return สตริงสุ่ม
-
Public String String GeneratemixString (ความยาว int)
-
StringBuffer sb = new StringBuffer ();
สุ่มสุ่ม = ใหม่สุ่ม ();
สำหรับ (int i = 0; i <length; i ++)
-
sb.append (allchar.charat (random.nextint (letterchar.length ())));
-
ส่งคืน sb.toString ();
-
-
* ส่งคืนสตริงตัวอักษรบริสุทธิ์แบบสุ่มยาวคงที่ (รวมถึงตัวอักษรตัวพิมพ์ใหญ่เท่านั้น)
-
* @param ความยาวสตริงแบบสุ่มความยาว
* @return สตริงสุ่ม
-
String String สาธารณะ GenerateLowerString (ความยาว int) {
return generateMixString (ความยาว) .ToLowerCase ();
-
-
* ส่งคืนสตริงตัวพิมพ์เล็กที่มีความยาวแบบสุ่มแบบคงที่ (รวมถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็กเท่านั้น)
-
* @param ความยาวสตริงแบบสุ่มความยาว
* @return สตริงสุ่ม
-
สตริงคงที่สาธารณะ generateupperstring (ความยาว int) {
return generatemixstring (ความยาว) .touppercase ();
-
-
* สร้างสตริง 0 ความยาวคงที่คงที่
-
* @param ความยาวสตริงความยาว
* @return Pure 0 String
-
สตริงคงที่สาธารณะ generatezerOstring (ความยาว int) {
StringBuffer sb = new StringBuffer ();
สำหรับ (int i = 0; i <length; i ++) {
sb.append ('0');
-
ส่งคืน sb.toString ();
-
-
* สร้างสตริงความยาวคงที่ตามจำนวนความยาวไม่เพียงพอที่จะเพิ่มลงในค์ก่อนหน้า
-
* @param num number
* @param fixdlenth string ความยาว
* @return สตริงความยาวคงที่
-
สตริงคงที่สาธารณะ tofixDlengthString (Long num, int fixdlenth) {
StringBuffer sb = new StringBuffer ();
strnum = string.valueof (num);
if (fixdlenth - strnum.length ()> = 0) {
sb.append (generatezerostring (fixdlenth - strnum.length ()));
} อื่น {
โยน runtimeException ใหม่ ("แปลงหมายเลข" + num + "ไปยังสตริงที่มีความยาว" + fixdlenth + "ข้อยกเว้นเกิดขึ้น!");
-
sb.append (strnum);
ส่งคืน sb.toString ();
-
-
* สร้างสตริงความยาวคงที่ตามจำนวนความยาวไม่เพียงพอที่จะเพิ่มลงในค์ก่อนหน้า
-
* @param num number
* @param fixdlenth string ความยาว
* @return สตริงความยาวคงที่
-
สตริงคงที่สาธารณะ tofixDlengthString (int num, int fixdlenth) {
StringBuffer sb = new StringBuffer ();
strnum = string.valueof (num);
if (fixdlenth - strnum.length ()> = 0) {
sb.append (generatezerostring (fixdlenth - strnum.length ()));
} อื่น {
โยน runtimeException ใหม่ ("แปลงหมายเลข" + num + "ไปยังสตริงที่มีความยาว" + fixdlenth + "ข้อยกเว้นเกิดขึ้น!");
-
sb.append (strnum);
ส่งคืน sb.toString ();
-
-
* จำนวนตัวเลข LEN ที่สร้างขึ้นในแต่ละครั้งจะแตกต่างกัน
* @param param
* @return จำนวนความยาวคงที่
-
สาธารณะคงที่ int getnotsimple (int [] param, int len)
-
สุ่มแรนด์ = ใหม่สุ่ม ();
สำหรับ (int i = param.length; i> 1; i--)
-
int index = rand.nextint (i);
int tmp = param [ดัชนี];
param [index] = param [i - 1];
param [i - 1] = tmp;
-
int result = 0;
สำหรับ (int i = 0; i <len; i ++)
-
ผลลัพธ์ = ผลลัพธ์ * 10 + param [i];
-
ผลการกลับมา;
-
โมฆะคงที่สาธารณะหลัก (สตริง [] args) {
System.out.println (generatestring (10));
System.out.println (GeneratemixString (10));
System.out.println (GenerateLowerString (10));
System.out.println (generateupperstring (10));
System.out.println (generatezerostring (10));
System.out.println (TofixDlengthString (123, 10));
System.out.println (TofixDlengthString (123L, 10));
int [] ใน = {1,2,3,4,5,6,7};
System.out.println (getNotSimple (ใน, 3));
-
-