Bab ini pertama -tama menjelaskan beberapa cara untuk menghasilkan angka acak Java, dan kemudian menunjukkannya melalui contoh.
Secara umum, ada tiga cara untuk menghasilkan angka acak di Java:
(01). Gunakan System.CurrentTimeMillis () untuk mendapatkan jumlah milidetik tipe panjang dari waktu saat ini.
(02). Mengembalikan nilai ganda antara 0 dan 1 melalui math.random ().
(03). Menghasilkan angka acak melalui kelas acak. Ini adalah kelas alat acak profesional dengan fungsi yang kuat. Metode pertama menggunakan system.currentTimemillis () untuk mendapatkan nomor acak
Dapatkan nomor acak melalui system.currentTimemillis (). Ini sebenarnya mendapatkan nomor milidetik saat ini, yang panjangnya tipe. Cara menggunakannya adalah sebagai berikut:
final long l = system.currentTimemillis ();
Untuk mendapatkan bilangan bulat tipe int, cukup konversi hasil di atas untuk mengetik int. Misalnya, dapatkan int integer antara [0, 100). Metode ini adalah sebagai berikut:
final long l = system.currentTimeMillis (); final int i = (int) (l % 100);
Metode kedua menggunakan math.random () untuk mendapatkan angka acak
Dapatkan angka acak melalui math.random (). Bahkan, ia mengembalikan nilai ganda antara 0 (inklusif) dan 1 (tidak termasuk). Cara menggunakannya adalah sebagai berikut:
Double D = Math.Random () terakhir;
Untuk mendapatkan bilangan bulat tipe int, cukup konversi hasil di atas untuk mengetik int. Misalnya, dapatkan int integer antara [0, 100). Metode ini adalah sebagai berikut:
final double d = math.random (); final int i = (int) (d*100);
Tipe ketiga menggunakan kelas acak untuk mendapatkan angka acak
Dapatkan angka acak melalui kelas acak.
Cara menggunakannya adalah sebagai berikut:
(01) Buat objek acak. Ada dua cara untuk membuat objek acak, sebagai berikut:
Acak acak = acak baru (); // konstruktor default acak acak = acak baru (1000); // Tentukan nomor benih
(02) Dapatkan angka acak melalui objek acak. Random mendukung jenis nilai acak: boolean, byte, int, long, float, double.
Misalnya, dapatkan int integer antara [0, 100). Metode ini adalah sebagai berikut:
int i2 = random.nextInt (100);
Antarmuka fungsi acak
// Konstruktor (i): Buat generator nomor acak baru. Acak () // konstruktor (II): Buat generator angka acak baru menggunakan benih panjang tunggal: acak publik (benih panjang) {setseed (seed); } Metode berikutnya menggunakannya untuk menyimpan status generator angka acak. Acak (biji panjang) boolean nextboolean () // mengembalikan angka "tipe boolean" pseudo-random berikutnya. void nextbytes (byte [] buf) // menghasilkan byte acak dan menempatkannya di byte array buf. double nextDouble () // Mengembalikan jumlah acak "tipe ganda antara [0,0, 1.0)". float nextFloat () // Mengembalikan jumlah acak "jenis float antara [0,0, 1.0)". int nextInt () // Mengembalikan nomor acak "int tipe" berikutnya. int nextint (int n) // mengembalikan jumlah acak "tipe int antara [0, n)". long nextLong () // Mengembalikan nomor acak "tipe panjang" berikutnya. Sinkronisasi ganda nextgausia () // Mengembalikan angka acak "tipe ganda" berikutnya, yang merupakan nilai ganda dalam distribusi Gaussian ("biasanya"), dengan nilai rata -rata 0,0 dan standar deviasi 1,0. Sinkronisasi void setseed (biji panjang) // Atur benih generator angka acak ini menggunakan satu biji panjang.Dapatkan contoh nomor acak
EG1:
Berikut ini adalah contoh untuk menunjukkan tiga cara di atas untuk mendapatkan angka acak. Kode sumber adalah sebagai berikut (acaktest.java):
Impor java.util.random; impor java.lang.math;/*** Program pengujian nomor acak java. Ada 3 cara untuk mendapatkan nomor acak: * (01), gunakan System.currentTimemillis () untuk mendapatkan jumlah milidetik tipe panjang dalam waktu saat ini. * (02), kembalikan nilai ganda antara 0 dan 1 melalui Math.random (). * (03) Hasilkan nomor acak melalui kelas acak. Ini adalah kelas alat acak profesional dengan fungsi yang kuat. * * @Author Skywang * @email [email protected] */kelas publik acaktest {public static void main (string args []) {// kembalikan nomor acak testsystemTimeMillis () melalui System's CurrentTimeMillis (); // kembalikan bilangan acak testmathrandom () melalui matematika acak (); // Buat objek acak baru dengan "biji 1000" dan uji API acak melalui tesrandomapis benih ini (acak baru (1000), "Random 1 (1000)"); tesrandomapis (acak baru (1000), "Random ke -2 (1000)"); // Buat objek acak "benih default" dan uji API acak melalui tesrandomapis benih ini (acak baru (), "Random 1 ()"); tesrandomapis (acak baru (), "random ke -2 ()"); } / ** * Mengembalikan nomor acak -01: Sistem Tes SurrentTimeMillis () * / private static void testsystemTimeMillis () {// final long l = system.currentTimeMillis (); // Dapatkan [0, integer final int i = (int) (l % 100); System.out.printf ("/n ---- System.currentTimeMillis () ---/nl =%si =%s/n", l, i); } / ** * Mengembalikan bilangan acak-02: Test matematika acak () * / private static void testmathrandom () {// mengembalikan angka acak tipe ganda melalui fungsi acak matematika (kisaran [0,0, 1.0) final ganda d = math.random (); // Dapatkan bilangan bulat antara [0, 100) final int i = (int) (d*100); System.out.printf ("/n ----- Math.random () ---/nd =%si =%s/n", d, i); } / ** * Mengembalikan nomor acak-03: test API Random * / private static void testrandomapis (acak acak, judul string) {final int buffer_len = 5; // Dapatkan nilai boolean acak boolean b = random.nextboolean (); // Dapatkan array acak buf [] byte [] buf = byte baru [buffer_len]; acak.nextbytes (buf); // Dapatkan nilai ganda acak, kisaran [0,0, 1.0) d ganda = acak.nextdouble (); // Dapatkan nilai float acak, kisaran [0,0, 1.0) float f = random.nextFloat (); // Dapatkan nilai int acak int i1 = random.nextInt (); // Dapatkan nilai int acak antara [0,100) int i2 = random.nextInt (100); // Dapatkan distribusi Gaussian acak ganda G = acak.nextgaussian (); // Dapatkan nilai panjang acak long l = random.nextLong (); System.out.printf ("/n ---%s ----/nb =%s, d =%s, f =%s, i1 =%s, i2 =%s, g =%s, l =%s, buf = [", judul, b, d, f, i1, i2, g, l); untuk (byte bt: buf) system.out.printf ("%s,", bt); System.out.println ("]"); }}
EG2:
Masalah: Menghasilkan angka acak antara (-10,10) dengan dua digit dipertahankan setelah titik desimal.
Larutan:
1. Fungsi pembuatan angka acak acak r = acak baru (); r.nextfloat (); // menghasilkan angka acak titik mengambang antara (0,1). Lipat gandakan angka acak di atas dengan 10 untuk mendapatkan nomor acak antara (0,10).
2. Hasilkan angka acak tipe boolean untuk mengontrol angka positif dan negatif dari angka: r.nextboolean ();
3. Metode untuk mempertahankan dua tempat desimal: Math.floor (n*100+0,5)/100; Angka yang diperoleh adalah tipe ganda.
Kodenya adalah sebagai berikut:
impor java.util.*; kelas publik creatreandom {public float numRandom () {float num; Acak r = acak baru (); float value = (float) (math.floor (r.nextfloat ()*1000+0,5)/100); Boolean b = r.nextboolean (); if (b) {num = value; } else {num = 0-value; } return num; } public static void main (string [] args) {createrandom cr = createrandom baru (); float num = cr.numrandom (); System.out.print (num); }}