Rumah >Java >javaTutorial >Mengapa Menetapkan Benih dalam Penjana Nombor Rawak Java Menghasilkan Output Berulang?

Mengapa Menetapkan Benih dalam Penjana Nombor Rawak Java Menghasilkan Output Berulang?

DDD
DDDasal
2024-11-12 19:04:02404semak imbas

Why Does Setting the Seed in Java's Random Number Generator Result in Repeated Outputs?

Menyelesaikan Isu Penjanaan Nombor Rawak Berulang di Jawa dengan Set Seed

Penerangan Isu:

Melaksanakan penjana nombor rawak, pembangun mungkin menghadapi situasi di mana memanggil kaedah nombor rawak, walaupun menetapkan benih, terus menjana output yang sama.

Contoh Kod:

Pertimbangkan coretan kod berikut:

class Numbers {
    public int random(int i) {
        Random randnum = new Random();
        randnum.setSeed(123456789);
        return randnum.nextInt(i);
    }
}

Setelah memanggil nombor.random(10) beberapa kali, ia akan mengembalikan nombor yang sama, seperti 5, dan bukannya output yang berbeza.

Penyelesaian:

Untuk memastikan penjanaan nombor rawak unik dengan benih yang dipratentukan, tika Rawak() mesti dikongsi di seluruh kelas. Ini boleh dicapai melalui pengubahsuaian kod berikut:

class Numbers {
    Random randnum;

    public Numbers() {
        randnum = new Random();
        randnum.setSeed(123456789);
    }

    public int random(int i) {
        return randnum.nextInt(i);
    }
}

Dengan memulakan tika randnum dalam pembina kelas, ia menjadi sumber kongsi yang boleh diakses oleh semua kaedah dalam kelas. Ini memastikan bahawa benih ditetapkan sekali sahaja, dan panggilan seterusnya ke kaedah rawak() menjana nombor rawak yang berbeza.

Atas ialah kandungan terperinci Mengapa Menetapkan Benih dalam Penjana Nombor Rawak Java Menghasilkan Output Berulang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn