1. Cara menghasilkan angka acak java
Di Java, ada tiga konsep umum angka acak.
1. Gunakan System.CurrentTimemillis () untuk mendapatkan jumlah milidetik tipe panjang dalam waktu saat ini.
2. Mengembalikan nilai ganda antara 0 dan 1 melalui matematika.random ().
3. Hasilkan nomor acak melalui kelas acak.
2. Deskripsi API Acak
1. Deskripsi API Java
Sebuah contoh dari kelas acak digunakan untuk menghasilkan aliran bilangan pseudo-acak. Kelas ini menggunakan benih 48-bit dan memodifikasinya menggunakan rumus kongruensi linier (lihat Seni Pemrograman Komputer Donald Knuth, Volume 2, Bagian 3.2.1).
Jika dua instance acak dibuat dengan benih yang sama, urutan panggilan metode yang sama dilakukan untuk setiap instance dan mereka akan menghasilkan dan mengembalikan urutan angka yang sama. Untuk memastikan implementasi atribut, algoritma spesifik ditentukan untuk kelas acak.
Banyak aplikasi akan menemukan metode acak di kelas matematika lebih mudah digunakan.
2. Ringkasan Metode
Acak()
Buat generator nomor acak baru.
Acak (biji panjang)
Buat generator nomor acak baru menggunakan satu benih panjang:
Public Random (Long Seed) {Setseed (Seed);} Metode berikutnya menggunakannya untuk menyimpan keadaan generator angka acak.
int yang dilindungi (int bit)
Menghasilkan nomor pseudo-acak berikutnya.
boolean nextboolean ()
Mengembalikan angka pseudo-acak berikutnya, yang merupakan nilai boolean yang didistribusikan secara seragam yang diambil dari urutan generator angka acak ini.
void nextbytes (byte [] bytes)
Hasilkan byte acak dan letakkan di array byte yang disediakan pengguna.
double nextDouble ()
Mengembalikan angka pseudo-acak berikutnya, yang merupakan nilai ganda yang didistribusikan secara merata antara 0,0 dan 1.0, diambil dari urutan generator angka acak ini.
float nextfloat ()
Mengembalikan angka pseudo-acak berikutnya, yang merupakan nilai float yang didistribusikan secara merata antara 0,0 dan 1.0, diambil dari urutan generator angka acak ini.
ganda nextgaussian ()
Mengembalikan angka pseudo-acak berikutnya, yang merupakan distribusi Gaussian ("biasanya") yang diambil dari urutan generator angka acak ini, dengan rata-rata 0,0 dan standar deviasi 1,0.
int nextint ()
Mengembalikan angka pseudo-acak berikutnya, yang merupakan nilai int yang didistribusikan secara merata dalam urutan generator angka acak ini.
int nextint (int n)
Mengembalikan angka pseudo-acak, yang merupakan nilai int yang didistribusikan secara merata antara 0 (termasuk) dan nilai yang ditentukan (tidak termasuk) yang diambil dari urutan generator angka acak ini.
long nextlong ()
Mengembalikan angka pseudo-acak berikutnya, yang merupakan nilai panjang yang didistribusikan secara seragam yang diambil dari urutan generator angka acak ini.
void setseed (biji panjang)
Atur benih generator bilangan acak ini menggunakan benih panjang tunggal.
3. Instruksi Penggunaan Kelas Acak
1. Perbedaan antara membawa biji dan tidak membawa biji
Penggunaan mendasar kelas acak adalah untuk membagi contoh acak dengan biji dan tanpa biji.
Dalam istilah awam, perbedaan antara keduanya adalah:
Untuk biji, hasil yang dihasilkan oleh setiap proses adalah sama.
Jika Anda tidak memiliki biji, apa yang Anda hasilkan adalah acak setiap kali Anda berlari, dan tidak ada pola sama sekali.
2. Buat objek acak tanpa biji
Acak acak = acak baru ();
3. Buat objek acak tanpa biji
Ada dua cara:
1) acak acak = acak baru (555L);
2) acak acak = acak baru ();
Random.setseed (555L);
4. Aplikasi Komprehensif
Berikut ini adalah kelas alat nomor acak yang baru ditulis untuk menunjukkan penggunaan:
Salinan kode adalah sebagai berikut:
impor java.util.random;
/**
* Nomor acak, alat string
* Pengguna: leizhimin
* Tanggal: 2008-11-19 9:43:09
*/
Kelas Publik Randomutils {
string final statis public allchar = "0123456789AbcdefghijKlmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
string final public static letterchar = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
public static final string numberChar = "0123456789";
/**
* Mengembalikan string acak panjang tetap (termasuk hanya huruf dan angka huruf besar dan kecil)
*
* @param panjang panjang string acak
* @return random string
*/
Public Static String GenerateString (int panjang) {
StringBuffer SB = StringBuffer baru ();
Acak acak = acak baru ();
untuk (int i = 0; i <panjang; i ++) {
SB.Append (allchar.charat (random.nextInt (allchar.length ())));
}
return sb.tostring ();
}
/**
* Mengembalikan string huruf murni acak panjang tetap (termasuk hanya huruf besar dan kecil)
*
* @param panjang panjang string acak
* @return random string
*/
public static string generatemixString (int panjang) {
StringBuffer SB = StringBuffer baru ();
Acak acak = acak baru ();
untuk (int i = 0; i <panjang; i ++) {
SB.Append (allchar.charat (random.nextInt (letterchar.length ())));
}
return sb.tostring ();
}
/**
* Mengembalikan string huruf modal murni acak panjang tetap (termasuk hanya huruf besar)
*
* @param panjang panjang string acak
* @return random string
*/
Public Static String GenerAteLowerString (int panjang) {
return generatemixstring (panjang) .tolowercase ();
}
/**
* Mengembalikan string kecil murni acak panjang tetap (termasuk hanya huruf besar dan huruf kecil)
*
* @param panjang panjang string acak
* @return random string
*/
string statis publik menghasilkanperstring (panjang int) {
return generatemixString (panjang) .tuppercase ();
}
/**
* Menghasilkan string 0 murni panjang tetap
*
* @param panjang string panjang
* @return pure 0 string
*/
Public Static String GenerateZerOstring (int panjang) {
StringBuffer SB = StringBuffer baru ();
untuk (int i = 0; i <panjang; i ++) {
SB.Append ('0');
}
return sb.tostring ();
}
/**
* Hasilkan string panjang tetap berdasarkan angka, panjangnya tidak cukup untuk ditambahkan ke yang sebelumnya.
*
* @param num nomor
* @param fixdlenth string length
* @return string panjang tetap
*/
string statis public tofixdlengthString (num panjang, int fixdlenth) {
StringBuffer SB = StringBuffer baru ();
String strnum = string.ValueOf (num);
if (fixdlenth - strnum.length ()> = 0) {
SB.Append (GenerateZerOstring (FixDlenth - Strnum.length ()));
} kalau tidak {
Lempar RunTimeException baru ("Konversi Nomor" + Num + "ke string dengan panjang" + fixdlenth + "Pengecualian terjadi!");
}
SB.Append (Strnum);
return sb.tostring ();
}
/**
* Hasilkan string panjang tetap berdasarkan angka, panjangnya tidak cukup untuk ditambahkan ke yang sebelumnya.
*
* @param num nomor
* @param fixdlenth string length
* @return string panjang tetap
*/
public static string tofixdlengthString (int num, int fixdlenth) {
StringBuffer SB = StringBuffer baru ();
String strnum = string.ValueOf (num);
if (fixdlenth - strnum.length ()> = 0) {
SB.Append (GenerateZerOstring (FixDlenth - Strnum.length ()));
} kalau tidak {
Lempar RunTimeException baru ("Konversi Nomor" + Num + "ke string dengan panjang" + fixdlenth + "Pengecualian terjadi!");
}
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 (GenerAteTeLowerString (15));
System.out.println (GenerateupperString (15));
System.out.println (GenerateReZerOstring (15));
System.out.println (tofixdlengthString (123, 15));
System.out.println (tofixdlengthString (123L, 15));
}
}
Hasil Menjalankan:
VWMBPINBZFGCPHG
23hyrahdjkkpwmv
TIGOWETBWKM1NDE
BPZ1KNEJPHB115N
000000000000000000
00000000000000123
00000000000000123
Proses selesai dengan kode keluar 0
6. Ringkasan
1. Angka acak sangat umum digunakan.
2. Objek kelas acak memiliki perbedaan antara apakah mereka membawa benih.
3. Ada dua cara untuk membuat objek benih dengan angka acak, dengan efek yang sama. Tapi angka acak dengan biji tampaknya tidak banyak berguna.
4. Fungsi acak mencakup fungsi math.random ().
5. Anda dapat menggunakan angka acak untuk menerapkan data acak yang kompleks seperti string acak.
6. Jangan mempelajari angka acak yang tidak mengulangi, itu tidak terlalu berarti.
Kode Tambahan:
Salinan kode adalah sebagai berikut:
paket com.test;
impor java.util.random;
Kelas Publik Randomutils {
string final statis public allchar = "0123456789AbcdefghijKlmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
letterchar string final public static = "abcdefghijkllmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
public static final string numberChar = "0123456789";
/**
* Mengembalikan string acak panjang tetap (termasuk hanya huruf dan angka huruf besar dan kecil)
* @param panjang panjang string acak
* @return random string
*/
GenerateString string statis publik (panjang int)
{
StringBuffer SB = StringBuffer baru ();
Acak acak = acak baru ();
untuk (int i = 0; i <panjang; i ++) {
SB.Append (allchar.charat (random.nextInt (allchar.length ())));
}
return sb.tostring ();
}
/**
* Mengembalikan string huruf murni acak panjang tetap (termasuk hanya huruf besar dan kecil)
* @param panjang panjang string acak
* @return random string
*/
GeneratemixString string statis publik (panjang int)
{
StringBuffer SB = StringBuffer baru ();
Acak acak = acak baru ();
untuk (int i = 0; i <panjang; i ++)
{
SB.Append (allchar.charat (random.nextInt (letterchar.length ())));
}
return sb.tostring ();
}
/**
* Mengembalikan string huruf modal murni acak panjang tetap (termasuk hanya huruf besar)
*
* @param panjang panjang string acak
* @return random string
*/
Public Static String GenerAteLowerString (int panjang) {
return generatemixstring (panjang) .tolowercase ();
}
/**
* Mengembalikan string kecil murni acak panjang tetap (termasuk hanya huruf besar dan huruf kecil)
*
* @param panjang panjang string acak
* @return random string
*/
string statis publik menghasilkanperstring (panjang int) {
return generatemixString (panjang) .tuppercase ();
}
/**
* Menghasilkan string 0 murni panjang tetap
*
* @param panjang string panjang
* @return pure 0 string
*/
Public Static String GenerateZerOstring (int panjang) {
StringBuffer SB = StringBuffer baru ();
untuk (int i = 0; i <panjang; i ++) {
SB.Append ('0');
}
return sb.tostring ();
}
/**
* Hasilkan string panjang tetap berdasarkan angka, panjangnya tidak cukup untuk ditambahkan ke yang sebelumnya.
*
* @param num nomor
* @param fixdlenth string length
* @return string panjang tetap
*/
string statis public tofixdlengthString (num panjang, int fixdlenth) {
StringBuffer SB = StringBuffer baru ();
String strnum = string.ValueOf (num);
if (fixdlenth - strnum.length ()> = 0) {
SB.Append (GenerateZerOstring (FixDlenth - Strnum.length ()));
} kalau tidak {
Lempar RunTimeException baru ("Konversi Nomor" + Num + "ke string dengan panjang" + fixdlenth + "Pengecualian terjadi!");
}
SB.Append (Strnum);
return sb.tostring ();
}
/**
* Hasilkan string panjang tetap berdasarkan angka, panjangnya tidak cukup untuk ditambahkan ke yang sebelumnya.
*
* @param num nomor
* @param fixdlenth string length
* @return string panjang tetap
*/
public static string tofixdlengthString (int num, int fixdlenth) {
StringBuffer SB = StringBuffer baru ();
String strnum = string.ValueOf (num);
if (fixdlenth - strnum.length ()> = 0) {
SB.Append (GenerateZerOstring (FixDlenth - Strnum.length ()));
} kalau tidak {
Lempar RunTimeException baru ("Konversi Nomor" + Num + "ke string dengan panjang" + fixdlenth + "Pengecualian terjadi!");
}
SB.Append (Strnum);
return sb.tostring ();
}
/**
* Jumlah digit len yang dihasilkan setiap kali berbeda
* @param param
* @Return Jumlah panjang tetap
*/
public static int getNotSimple (int [] param, int len)
{
Rand acak = acak baru ();
untuk (int i = param.length; i> 1; i--)
{
int index = rand.nextint (i);
int tmp = param [indeks];
param [index] = param [i - 1];
param [i - 1] = tmp;
}
Hasil int = 0;
untuk (int i = 0; i <len; i ++)
{
hasil = hasil * 10 + param [i];
}
hasil pengembalian;
}
public static void main (string [] args) {
System.out.println (GenerateString (10));
System.out.println (GenerAteMixString (10));
System.out.println (GenerAteTeLowerString (10));
System.out.println (GenerateupperString (10));
System.out.println (GenerateReZerOstring (10));
System.out.println (tofixdlengthString (123, 10));
System.out.println (tofixdlengthString (123L, 10));
int [] di = {1,2,3,4,5,6,7};
System.out.println (getNotsimple (IN, 3));
}
}