Apabila memilih item daripada set, selalunya wajar untuk menetapkan kebarangkalian yang berbeza kepada item yang berbeza. Kaedah ini dikenali sebagai pemilihan rawak berwajaran.
Pertimbangkan senario berikut di mana anda mempunyai koleksi item dengan pemberat yang berkaitan:
Item | Weight |
---|---|
Sword of Misery | 10 |
Shield of Happy | 5 |
Potion of Dying | 6 |
Triple-Edged Sword | 1 |
Dalam kes ini, berat mewakili kemungkinan memilih barang itu. Sebagai contoh, anda berkemungkinan 10 kali lebih besar untuk memperoleh Pedang Kesengsaraan daripada Pedang Bermata Tiga.
Untuk melaksanakan pemilihan rawak berwajaran di Java, kami boleh menggunakan NavigableMap:
import java.util.NavigableMap; import java.util.Random; import java.util.TreeMap; public class RandomCollection<E> { private final NavigableMap<Double, E> map = new TreeMap<>(); private final Random random; private double total = 0; public RandomCollection() { this(new Random()); } public RandomCollection(Random random) { this.random = random; } public RandomCollection<E> add(double weight, E result) { if (weight <= 0) return this; total += weight; map.put(total, result); return this; } public E next() { double value = random.nextDouble() * total; return map.higherEntry(value).getValue(); } }
Penggunaan:
RandomCollection<String> rc = new RandomCollection<>() .add(40, "dog").add(35, "cat").add(25, "horse"); for (int i = 0; i < 10; i++) { System.out.println(rc.next()); }
Kod ini menunjukkan cara menambah item dengan pemberat tertentu pada koleksi dan kemudian pilih secara rawak item berdasarkan kebarangkalian yang ditetapkan.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pemilihan Rawak Berwajaran di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!