"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué establecer la semilla en la clase aleatoria de Java devuelve el mismo número?

¿Por qué establecer la semilla en la clase aleatoria de Java devuelve el mismo número?

Publicado el 2024-11-09
Navegar:274

Why Does Setting the Seed in Java's Random Class Return the Same Number?

Generación de números aleatorios de Java: ¿Por qué configurar la semilla devuelve el mismo número?

A pesar de configurar la semilla de la clase Random con un valor específico, el generador de números aleatorios devuelve constantemente el mismo número. Exploremos qué podría estar causando este problema.

Comprensión de la clase aleatoria y la inicialización de semillas

La clase Java Random está diseñada para generar números pseudoaleatorios. De forma predeterminada, utiliza su reloj interno como valor inicial, lo que hace que genere una secuencia de números relativamente predecible. Para personalizar la secuencia, puede establecer explícitamente una semilla usando el método setSeed().

La semilla es un valor numérico utilizado para inicializar el estado interno del generador de números aleatorios. Este estado determina la secuencia de números generados.

Problema: compartir la instancia aleatoria

En el código proporcionado, está creando una nueva instancia de Random dentro del método random(). Esto significa que cada vez que llamas a random(), se establece una nueva semilla, lo que anula efectivamente el valor de semilla previamente establecido.

Para resolver este problema, debes compartir la instancia de Random con toda la clase. Al crear una única instancia y configurar la semilla una vez cuando se inicializa la clase, se asegura de que se genere la misma secuencia de números de manera consistente.

Código actualizado

El siguiente código actualizado resuelve el problema:

public class Numbers {
    private Random randnum;

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

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

En este código actualizado:

  1. Se declara un campo privado llamado randnum para representar la instancia aleatoria compartida.
  2. Se crea la instancia aleatoria y se genera la semilla. establecido dentro del constructor, asegurando que la semilla se inicializa solo una vez cuando se crea el objeto de clase.

Al realizar estos cambios, ahora obtendrá diferentes números aleatorios al llamar a random() desde diferentes partes de su programa, respetando al mismo tiempo el valor inicial especificado.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3