Rumah  >  Artikel  >  Java  >  Mengapakah penjana nombor rawak Java saya mengembalikan nombor yang sama apabila dipanggil dari kelas lain?

Mengapakah penjana nombor rawak Java saya mengembalikan nombor yang sama apabila dipanggil dari kelas lain?

DDD
DDDasal
2024-11-07 04:54:02880semak imbas

Why does my Java random number generator return the same number when called from another class?

Penjana Nombor Rawak Java dengan Benih Tetap

Soalan:

Di Java, apabila menetapkan benih untuk penjana nombor rawak, mengapa ia sentiasa mengembalikan nombor yang sama apabila saya memanggil kaedah dari kelas lain?

Kod:

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

Apabila memanggil numbers.random(10) beberapa kali, ia secara konsisten menghasilkan nilai yang sama. Bagaimanakah kita boleh mengubah suai kod untuk menghasilkan nombor rawak yang berbeza sambil mengekalkan keperluan untuk menetapkan benih?

Jawapan:

Untuk memastikan nombor rawak yang berbeza dijana, Contoh rawak mesti dikongsi di seluruh kelas dan bukannya dicipta semula untuk setiap panggilan kaedah. Ini boleh dicapai melalui pengubahsuaian berikut:

public class Numbers {
    private Random randnum;  // Declare the Random instance as a class variable

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

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

Dengan memulakan tika randnum dalam pembina kelas dan menjadikannya boleh diakses melalui kaedah kelas, kami memastikan objek Rawak yang sama digunakan di seluruh kelas, mendahului kepada nombor rawak berbeza yang dijana dengan setiap panggilan kaedah.

Atas ialah kandungan terperinci Mengapakah penjana nombor rawak Java saya mengembalikan nombor yang sama apabila dipanggil dari kelas lain?. 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