Generator Angka Acak Java
Pelajari cara menghasilkan angka acak di Java dengan contoh kode interaktif. Jelajahi Random.nextInt(), SecureRandom, ThreadLocalRandom, dan Math.random() dengan penjelasan terperinci.
Editor Kode Java
Pelajari cara menghasilkan angka acak di Java dengan contoh kode interaktif. Jelajahi Random.nextInt(), SecureRandom, ThreadLocalRandom, dan Math.random() dengan penjelasan terperinci.
import java.util.Random;
public class RandomExample {
public static void main(String[] args) {
Random rand = new Random();
int min = 1;
int max = 100;
int quantity = 5;
System.out.println("Random numbers between " + min + " and " + max + ":");
for (int i = 0; i < quantity; i++) {
int num = rand.nextInt(max - min + 1) + min;
System.out.print(num + " ");
}
}
}
Keluaran
Ini pratinjau browser, bukan eksekusi Java atau C++. Nilainya tidak cocok untuk kriptografi.
Pratinjau contoh
Acak Dasar dengan java.util.Random
Gunakan Random.nextInt() untuk menghasilkan bilangan bulat acak dalam rentang tertentu. Ini adalah metode paling umum untuk pembuatan angka acak tujuan umum di Java.
Butuh Nomor Acak Cepat?
Coba generator angka acak online kami untuk hasil instan tanpa menulis kode apa pun.
Memahami Java Random Number Generation
Java menyediakan beberapa cara untuk menghasilkan angka acak, masing-masing dioptimalkan untuk kasus penggunaan yang berbeda. java.util.Random menggunakan algoritma Linear Congruential Generator (LCG), SecureRandom menyediakan angka acak yang kuat secara kriptografis, ThreadLocalRandom menawarkan pembuatan thread yang aman untuk aplikasi bersamaan, dan Math.random() menyediakan cara sederhana untuk menghasilkan ganda acak.
java.util.Random
java.util.Random menyediakan pembuatan angka pseudo-acak cepat yang cocok untuk simulasi, game, dan tugas pemrograman umum. Aman untuk penggunaan dasar.
Acak Aman
java.security.SecureRandom menggunakan algoritme khusus platform (SHA1PRNG, NativePRNG) untuk menghasilkan angka acak yang aman secara kriptografis untuk aplikasi keamanan.
ThreadLocalRandom
ThreadLocalRandom menyediakan pembuatan nomor acak yang aman utas yang efisien yang dirancang khusus untuk aplikasi multi-utas, menghindari pertengkaran dan overhead sinkronisasi.
Matematika.acak()
Math.random() adalah metode sederhana yang mengembalikan nilai ganda antara 0,0 dan 1,0. Nyaman untuk perhitungan cepat tetapi kurang fleksibel dibandingkan opsi lain.
Kasus Penggunaan Umum
Game & Simulasi
Hasilkan lemparan dadu acak, undian kartu, kemunculan musuh, dan acara permainan menggunakan Random.nextInt() atau ThreadLocalRandom dalam loop game.
Keamanan & Kriptografi
Buat kata sandi aman, kunci API, token sesi, dan garam enkripsi menggunakan SecureRandom untuk keacakan kekuatan kriptografi.
Aplikasi Bersamaan
Gunakan ThreadLocalRandom dalam aliran paralel dan aplikasi multi-utas untuk menghindari pertengkaran dan meningkatkan performa.
Pengujian Perangkat Lunak
Buat data pengujian acak, input pengujian fuzz, dan kasus tepi untuk memastikan cakupan kode yang kuat dan deteksi bug dalam aplikasi Java.
Cara Kerja Java Random Number Generation
Java's java.util.Random class uses a Linear Congruential Generator (LCG) algorithm with a 48-bit seed. It provides a simple way to generate pseudo-random numbers and is synchronized for thread safety.
The SecureRandom class provides cryptographically strong random numbers by using platform-specific implementations. On most systems, it uses the operating system's entropy source or hardware random number generators.
ThreadLocalRandom, introduced in Java 7, is designed for multi-threaded applications. It uses a random number generator that is isolated to the current thread, avoiding synchronization overhead and contention.
Tips praktis
Pilih API yang Tepat
Gunakan Random untuk kasus sederhana, SecureRandom untuk keamanan, ThreadLocalRandom untuk aplikasi bersamaan, dan Math.random() hanya untuk prototipe cepat. Masing-masing memiliki kasus penggunaan tertentu.
Selalu gunakan SecureRandom untuk keamanan
Jangan pernah menggunakan Random atau Math.random() untuk kata sandi, token, atau operasi kriptografi. Selalu gunakan SecureRandom untuk memastikan keacakan yang kuat dan menghindari pola yang dapat diprediksi.
Optimalkan untuk Akses Bersamaan
Dalam aplikasi multi-threaded, ThreadLocalRandom secara signifikan lebih cepat daripada menyinkronkan objek Random. Gunakan dalam aliran paralel dan koleksi bersamaan.
Spesifikasi teknis
Algoritma
- Generator Kongruensial Linier (Kelas acak)
- SHA1PRNG atau NativePRNG (SecureRandom)
- ThreadLocalRandom (Java 7+, berdasarkan Acak)
- Ganda pseudo-acak (Math.random())
Karakteristik Kinerja
- Math.random(): Tercepat untuk ganda sederhana
- ThreadLocalRandom: Terbaik untuk akses bersamaan
- Acak: Tujuan umum yang baik, overhead yang disinkronkan
- SecureRandom: Lebih lambat karena pengumpulan entropi
Pertanyaan yang Sering Diajukan
API Java apa saja yang dibahas?
java.util.Random, SecureRandom, ThreadLocalRandom, dan Math.random(), masing-masing dengan contoh yang difokuskan.
Bisakah saya menyesuaikan contohnya?
Ya. Atur nilai minimum, maksimum, dan jumlah di panel parameter, lalu jalankan untuk melihat hasil secara instan.
Mana yang sebaiknya saya gunakan untuk keamanan?
SecureRandom. API lainnya bersifat mudah diprediksi dan tidak boleh digunakan untuk token, kunci, atau kata sandi.
Bagaimana dengan kode multi-thread?
ThreadLocalRandom menghindari kontensi antar thread dan biasanya menjadi pilihan di dalam parallel stream dan thread pool.
Bagaimana cara menghasilkan angka acak antara dua nilai di Java?
Panggil nextInt(bound) untuk nilai dari 0 hingga bound-1, sehingga nextInt(50) menghasilkan 0 sampai 49. Untuk rentang khusus, tambahkan offset: nextInt(10) + 5 menghasilkan 5 sampai 14. Sejak Java 17, nextInt(origin, bound) melakukan hal ini dalam satu panggilan, dengan origin inklusif dan bound eksklusif.
Apakah Math.random() bisa mengembalikan nilai 1?
Tidak. Math.random() mengembalikan double dari 0.0 (inklusif) hingga mendekati tetapi tidak pernah mencapai 1.0, sehingga 0.0 atau 0.9999 bisa muncul tetapi 1.0 tidak pernah. Secara internal metode ini mendelegasikan ke satu instance java.util.Random, jadi memanggil metode Random secara langsung lebih jelas untuk kode modern.
Mengapa saya mendapatkan angka acak yang sama setiap kali menjalankan program saya?
Random yang dibuat dengan seed tetap, seperti new Random(42), selalu mereproduksi urutan yang identik. Hilangkan argumen seed dan seed akan diatur secara otomatis dari nilai unik yang dikombinasikan dengan System.nanoTime(). Seed tetap berguna untuk pengujian yang dapat direproduksi dan debugging, tetapi sebaiknya tidak digunakan dalam kode produksi.
Bagaimana cara memilih elemen acak dari array atau list?
Hasilkan indeks lalu baca posisi tersebut: list.get(random.nextInt(list.size())) untuk list atau array[random.nextInt(array.length)] untuk array, karena nextInt(n) mencakup 0 hingga n-1. Alternatifnya, Collections.shuffle() mengacak seluruh urutan list dalam satu proses, sehingga tidak ada elemen yang berulang dalam satu kali pengacakan.
Referensi & Sumber Daya
-
java.util.Random - Official Javadoc
Javadoc resmi Oracle untuk java.util.Random dan internal LCG-nya.
-
Linear Congruential Generator - Wikipedia
Algoritme linear congruential generator yang digunakan oleh banyak runtime.