Rumah >Java >javaTutorial >Math.random() * n vs. Random.nextInt(n): Manakah Pilihan yang Lebih Baik untuk Menjana Integer Rawak?
Pilihan Antara Math.random() * n dan Random.nextInt(n)
Pilihan antara Math.random() * n dan Random.nextInt(n) timbul apabila menjana integer rawak dalam julat tertentu [0, n-1]. Walaupun kedua-dua pendekatan menyediakan kefungsian untuk tujuan ini, ia berbeza dari segi kecekapan dan potensi bias.
Math.random() * n
Math.random() generates nilai berganda rawak antara 0.0 (inklusif) dan 1.0 (eksklusif). Untuk mendapatkan integer rawak dalam julat yang diingini, hasilnya didarab dengan n dan kemudian dibuang ke int.
Random.nextInt(n)
Random.nextInt (n) secara langsung menjana int rawak antara 0 (inklusif) dan n-1 (inklusif).
Kecekapan dan Bias
Random.nextInt(n) adalah lebih cekap daripada Math.random() n kerana ia melibatkan satu operasi berbanding dengan berbilang operasi yang diperlukan untuk Math.random(). Selain itu, Random.nextInt(n) kurang berat sebelah berbanding Math.random() n, terutamanya apabila berurusan dengan sejumlah besar nilai.
Penjelasan untuk bias ini terletak pada cara Math.random() menghasilkan nilai berganda. Ia menggunakan algoritma canggih yang menghasilkan mantissa rawak (bahagian pecahan gandaan) dengan taburan lebih kurang seragam. Walau bagaimanapun, apabila hasilnya didarab dengan n dan dilemparkan kepada int, nilai tertentu dalam julat menjadi sedikit atau kurang berkemungkinan dijana, membawa kepada berat sebelah kecil.
Sebaliknya, Random.nextInt(n ) secara langsung menjana integer dalam julat yang dikehendaki, memastikan pengedaran seragam sepenuhnya. Sifat ini menghapuskan potensi bias yang dihadapi dengan Math.random() * n.
Kesimpulan
Walaupun Math.random() * n boleh menjana integer rawak, ia kecekapan dan potensi untuk berat sebelah menjadikan Random.nextInt(n) pilihan pilihan untuk tujuan ini. Random.nextInt(n) adalah lebih cekap dan kurang berat sebelah, menyediakan kaedah yang boleh dipercayai dan tepat untuk menjana integer rawak dalam julat yang ditentukan.
Atas ialah kandungan terperinci Math.random() * n vs. Random.nextInt(n): Manakah Pilihan yang Lebih Baik untuk Menjana Integer Rawak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!