Last Updated on 13 years by Mas Herdi
Pada kesempatan kali ini, mari kita sedikit bermain-main dengan sebuah kelas di Java yang bernama java.util.Random.
Yep, dari nama kelasnya sebenarnya sudah ditebak, kelas ini berfungsi sebagai random number generator di Java. Kelas Random bisa diakses lewat packaage java.util atau melalui static class, Math. Objek dari kelas Random ternyata tidak hanya bisa menghasilkan value berupa angka, namun class Random bisa menghasilkan random boolean, byte, float, double, int, long dan Gaussian, dimana method random pada Math hanya bisa memproduksi value double dalam range 0.0 ≤x < 1.0, dimana x adalah value yang dihasilkan oleh method Random tersebut.
Jadi apakah, menggenerate angka Random, berarti benar-benar menghasilkan angka acak, dan sembarangan? Tentu saja tidak. Bahkan sesuatu yang random pun mempunyai sebuah formula untuk menghasilkan ke-“random”-an tersebut. Yeah, dibalik fungsi random, ada sebuah formula matematika yang sangat kompleks. Dan ternyata penggenerate angka acak tersebut mengacu pada system time, yang tentu saja waktu akan terus berbeda setiap harinya.
Kelas random tidak hanya menghasilkan angka acak yang benar-benar acak, namun random di sini berarti peluang angka yang muncul di setiap kesempatan haruslah sama. Dan kita akan membuktikannya nanti dengan sebuah program kecil.
Sebelumnya kita harus tahu, gimana kelas Random bekerja :
Random r = new Random();
Seperti kelas yang lain, kelas Random juga harus diinstantiasi untuk membuat suatu object Random.
int rand = r.nextInt();
Kode di atas kamu pasti juga tahu gunanya, kita memilih sebuah integer random dan memasukkannya ke dalam variabel rand
int rand = r.nextInt(6);
Oke, kalau kode di atas berfungsi untuk memproduksi angka random, hanya saja angka random tersebut mempunyai batas, yaitu 0-5.
So, sekarang kita coba menggenerate sejuta angka random 0-5, dan kita lihat peluangnya.
Buat sebuah program Java kecil bernama Mainrandom.java dan pastekan kode berikut:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ import java.util.Random; /** * * @author Herdi Naufal */ public class Mainrandom { /** * @param args the command line arguments */ private static void hitungRandom() { Random r = new Random(6); int random; int angka0=0; int angka1=0; int angka2=0; int angka3=0; int angka4=0; int angka5=0; for(int i =0;i<=1000000;i++){ random = r.nextInt(6); switch(random) { case 0: angka0++; break; case 1: angka1++; break; case 2: angka2++; break; case 3: angka3++; break; case 4: angka4++; break; case 5: angka5++; break; } } System.out.println("Angka 0 muncul "+angka0+" kali"); System.out.println("Angka 1 muncul "+angka1+" kali"); System.out.println("Angka 2 muncul "+angka2+" kali"); System.out.println("Angka 3 muncul "+angka3+" kali"); System.out.println("Angka 4 muncul "+angka4+" kali"); System.out.println("Angka 5 muncul "+angka5+" kali"); } public static void main(String[] args) { // TODO code application logic here hitungRandom(); } }
Dan, voila setelah di-compile dan di-running. Kita akan mendapatkan output jumlah kemunculan setiap angka dalam sejuta kesempatan sebagai berikut.
Angka 0 muncul 166361 kali
Angka 1 muncul 166879 kali
Angka 2 muncul 166836 kali
Angka 3 muncul 167060 kali
Angka 4 muncul 166708 kali
Angka 5 muncul 166157 kali
BUILD SUCCESSFUL (total time: 23 seconds)
Dari hasil di atas, kita bisa tahu bahwa setiap angka mempunyai jumlah kemunculan yang hampir sama. Dan bisa dibilang peluang kemunculan mereka adalah sama !
Untuk apa?
Ok, sekarang kalian sudah tahu apa yang sebenarnya dimaksud dengan angka random. Kegunaan angka random sangat luas, terutama di bidang keamanan.
Sampai jumpa di topik berikutnya!
bacaan lebih lanjut :
- Donald E. Knuth, Art of Computer Programming, Seminumerical Algorithms
- JavaDoc
- WIRED – Totally Random
- http://en.wikipedia.org/wiki/Lehmer_random_number_generator
- http://publib.boulder.ibm.com/infocenter/clresctr/vxrx/index.jsp?topic=%2Fcom.ibm.cluster.essl.v5r1.essl100.doc%2Fam501_hsnrand.html