"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que definir a semente na classe aleatória do Java retorna o mesmo número?

Por que definir a semente na classe aleatória do Java retorna o mesmo número?

Publicado em 2024-11-09
Navegar:154

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

Java Random Number Generation: Por que definir a semente retorna o mesmo número?

Apesar de definir a semente da classe Random com um valor específico, o gerador de números aleatórios está retornando consistentemente o mesmo número. Vamos explorar o que pode estar causando esse problema.

Compreendendo a classe Random e a inicialização da semente

A classe Java Random foi projetada para gerar números pseudo-aleatórios. Por padrão, ele usa seu relógio interno como valor inicial, fazendo com que ele gere uma sequência de números relativamente previsível. Para personalizar a sequência, você pode definir explicitamente uma semente usando o método setSeed().

A semente é um valor numérico usado para inicializar o estado interno do gerador de números aleatórios. Este estado determina a sequência de números gerados.

Problema: Compartilhando a instância aleatória

No código fornecido, você está criando uma nova instância de Random dentro do método random(). Isso significa que toda vez que você chama random(), uma nova semente está sendo definida, substituindo efetivamente o valor inicial definido anteriormente.

Para resolver esse problema, você precisa compartilhar a instância Random em toda a classe. Ao criar uma única instância e definir a semente uma vez quando a classe é inicializada, você garante que a mesma sequência de números seja gerada de forma consistente.

Código atualizado

O seguinte código atualizado resolve o problema:

public class Numbers {
    private Random randnum;

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

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

Neste código atualizado:

  1. Um campo privado chamado randnum é declarado para representar a instância Random compartilhada.
  2. A instância Random é criada e a semente é definido dentro do construtor, garantindo que a semente seja inicializada apenas uma vez quando o objeto de classe for criado.

Ao fazer essas alterações, você agora obterá números aleatórios diferentes ao chamar random() de diferentes partes do seu programa, respeitando o valor inicial especificado.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3