Implementação de Métodos Estáticos e Geração de Números Aleatórios em Java

Em Java, a criação de métodos estáticos permite a execução de funções utilitárias sem a necessidade de instanciar uma classe. Um exemplo comum é a operação aritmética de elevar um número ao quadrado. Embora a biblioteca padrão forneça o método Math.pow(), implementar uma lógica personalizada pode ser útil para entender o funcionamento de métodos estáticos e tipos primitivos.

public class CalculadoraEstatica {

    public static void main(String[] args) {
        int limite = 10;
        
        for (int i = 1; i <= limite; i++) {
            int resultado = obterQuadrado(i);
            // Alternativa utilizando a biblioteca padrão:
            // int resultado = (int) Math.pow(i, 2);
            System.out.printf("Valor: %d | Quadrado: %d%n", i, resultado);
        }
    }

    /**
     * Calcula o quadrado de um inteiro de forma estática.
     */
    public static int obterQuadrado(int numero) {
        return numero * numero;
    }
}

Além de operações matemáticas simples, a geração de números pseudoaleatórios é uma tarefa frequente. O método Math.random() retorna um valor de ponto flutuante entre 0.0 e 1.0. Para obter um intervalo específico, como valores de 1 a 6 (simulando um dado), aplicamos uma trasnformação linear. Abaixo, o exemplo utiliza uma interface gráfica simples para exibir os resultados.

import javax.swing.JOptionPane;

public class GeradorDeDados {
    public static void main(String[] args) {
        StringBuilder saida = new StringBuilder();
        int totalSorteios = 20;

        for (int cont = 1; cont <= totalSorteios; cont++) {
            // Gera um número entre 1 e 6
            int face = 1 + (int) (Math.random() * 6);
            saida.append(face).append("  ");
            
            if (cont % 5 == 0) {
                saida.append("\n");
            }
        }

        JOptionPane.showMessageDialog(null, saida.toString(), 
            "Sequência de Números Aleatórios", JOptionPane.PLAIN_MESSAGE);

        System.exit(0);
    }
}

É importante compreender que a classe java.util.Random utiliza uma "semente" (seed) para inicializar seu algoritmo. Se dois objetos Random forem criados com a mesma semente, eles produzirão exatamente a mesma sequência de valores, tornando o processo determinístico. Para obter sequências variadas, geralmente utiliza-se o tempo atual do sistema como semente.

import java.util.Random;

public class AnaliseDeSementes {
    public static void main(String[] args) {
        long sementeFixa = 50;

        Random g1 = new Random(sementeFixa);
        Random g2 = new Random(sementeFixa);
        Random g3 = new Random(System.currentTimeMillis());

        System.out.println("Gerador 1 (Semente 50): " + g1.nextInt(100));
        System.out.println("Gerador 2 (Semente 50): " + g2.nextInt(100));
        System.out.println("Gerador 3 (Tempo Atual): " + g3.nextInt(100));
        
        // g1 e g2 sempre retornarão o mesmo valor na primeira chamada
    }
}

Para casos onde é necessário implementar o próprio algoritmo de geração, o Gerador Linear Congruencial (LCG) é uma das técnicas mais clássicas. Ele utiliza uma fórmula matemática para produzir uma sequência de números que aparentam ser aleatórios com base em parâmetros pré-definidos como multiplicador e módulo.

public class AlgoritmoLCG {
    public static void main(String[] args) {
        // Parâmetros comuns para o algoritmo LCG
        final long MODULO = (long) Math.pow(2, 31) - 1;
        final long MULTIPLICADOR = 16807;
        final long INCREMENTO = 0;
        
        long valorAtual = 1; // Semente inicial
        int quantidade = 1000;

        System.out.println("Gerando " + quantidade + " números:");
        for (int i = 0; i < quantidade; i++) {
            valorAtual = (MULTIPLICADOR * valorAtual + INCREMENTO) % MODULO;
            
            // Exibe apenas os primeiros 10 para demonstração
            if (i < 10) {
                System.out.println("Valor " + (i + 1) + ": " + valorAtual);
            }
        }
    }
}

Tags: java RandomNumberGenerator StaticMethods LinearCongruentialGenerator SoftwareDevelopment

Publicado em 10-13 06:48