Maison  >  Article  >  Java  >  Pourquoi mon générateur de nombres aléatoires Java renvoie-t-il le même nombre lorsqu'il est appelé depuis une autre classe ?

Pourquoi mon générateur de nombres aléatoires Java renvoie-t-il le même nombre lorsqu'il est appelé depuis une autre classe ?

DDD
DDDoriginal
2024-11-07 04:54:02933parcourir

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

Générateur de nombres aléatoires Java avec graine fixe

Question :

En Java, lors de la configuration une graine pour un générateur de nombres aléatoires, pourquoi renvoie-t-elle toujours le même numéro lorsque j'appelle la méthode depuis un autre class?

Code :

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

Lorsque vous appelez number.random(10) plusieurs fois, il génère systématiquement la même valeur. Comment pouvons-nous modifier le code pour générer différents nombres aléatoires tout en conservant l'obligation de définir la graine ?

Réponse :

Pour garantir que différents nombres aléatoires sont générés, le L'instance aléatoire doit être partagée dans toute la classe plutôt que d'être recréée pour chaque appel de méthode. Ceci peut être réalisé grâce aux modifications suivantes :

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);
    }
}

En initialisant l'instance randnum dans le constructeur de classe et en la rendant accessible via les méthodes de la classe, nous garantissons que le même objet Random est utilisé dans toute la classe, ce qui conduit à différents nombres aléatoires générés à chaque appel de méthode.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn