Rumah >Java >javaTutorial >Bagaimana untuk Menjana Nilai Integer Besar Rawak Teragih Seragam dalam Julat Tertentu di Jawa?
Menjana Nilai Integer Besar Rawak dalam Java
Di Java, menjana integer rawak dalam julat yang ditentukan boleh mencabar apabila berurusan dengan nombor yang besar. Isu timbul apabila menggunakan kaedah konvensional seperti nextDouble() untuk penjanaan nombor rawak, kerana nilai yang dijana mungkin tidak diedarkan secara seragam melebihi had 253.
Menggunakan BigInteger Constructor
Untuk menangani perkara ini, kelas BigInteger menyediakan pembina yang membolehkan penciptaan nilai BigInteger rawak diedarkan secara seragam dalam julat bit tertentu.
Membina Pembina BigInteger:
<code class="java">public BigInteger(int numBits, Random rnd)</code>
Pembina ini mengambil dua parameter:
Menjana Nilai Rawak Dalam Julat
Untuk menjana nilai rawak dalam julat bukan kuasa-2 0 hingga n (termasuk), gelung boleh digunakan:
<code class="java">BigInteger randomNumber; do { randomNumber = new BigInteger(upperLimit.bitLength(), randomSource); } while (randomNumber.compareTo(upperLimit) >= 0);</code>
Gelung ini berulang sehingga nilai rawak yang sah diperolehi. Ia memastikan bahawa nilai yang dijana diedarkan secara seragam dalam julat yang ditentukan.
Mengoptimumkan Kiraan Lelaran
Untuk mengurangkan bilangan lelaran gelung, penyelesaian yang lebih halus boleh digunakan .
<code class="java">int nlen = upperLimit.bitLength(); BigInteger nm1 = upperLimit.subtract(BigInteger.ONE); BigInteger randomNumber, temp; do { temp = new BigInteger(nlen + 100, randomSource); randomNumber = temp.mod(upperLimit); } while (s.subtract(randomNumber).add(nm1).bitLength() >= nlen + 100);</code>
Pendekatan ini termasuk had pada bilangan lelaran untuk mengelakkan pelaksanaan gelung yang berlebihan. Ia mengimbangi kelajuan dan ketepatan, mengurangkan kemungkinan bilangan lelaran yang banyak.
Atas ialah kandungan terperinci Bagaimana untuk Menjana Nilai Integer Besar Rawak Teragih Seragam dalam Julat Tertentu di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!