Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Minha resolução Números Primos

public class GerarPrimo extends NumerosPrimos {
    public int gerarProximoPrimo(int ultimoPrimoConhecido) {
        int proximoNumero = ultimoPrimoConhecido + 1;
        while (!verificarPrimalidade(proximoNumero)) {
            proximoNumero++;
        }
        return proximoNumero;
    }
}
public class NumerosPrimos {
    public boolean verificarPrimalidade(int numero){
        if (numero <= 1){
            return false;
        }
        for (int i = 2; i*i <= numero; i++){
            if (numero % i == 0){
                return false;
            }
        }
        return true;
    }
    public void listarPrimos(int limiteSuperior){
        System.out.println("Números Primos até: " + limiteSuperior + ": ");
        for (int i = 2; i <= limiteSuperior; i++) {
            if (verificarPrimalidade(i)) {
                System.out.println(i);
            }
        }
    }
}
public class TestePrimos {
    public static void main(String[] args) {
        VerificarPrimo numero1 = new VerificarPrimo();
        numero1.verificarPrimalidade(17);
        numero1.verificarPrimo(17);
        GerarPrimo gerador = new GerarPrimo();
        int proximoPrimo = gerador.gerarProximoPrimo(17);
        System.out.println("O proximo primo após 17 é: " + proximoPrimo) ;
        NumerosPrimos numerosPrimos = new NumerosPrimos();
        numerosPrimos.listarPrimos(30);

    }
}
public class VerificarPrimo extends NumerosPrimos {
    public void verificarPrimo(int numero) {
        if (verificarPrimalidade(numero)) {
            System.out.println(numero + " é um número primo");
        }else{
            System.out.println (numero + " não é um número primo");
        }

    }
}
1 resposta

Olá, Pedro! Como vai?

Sua solução para o exercício de números primos em Java está muito bem estruturada e merece atenção especial por alguns pontos que se destacam logo de início.

A forma como você organizou as classes com herança é um dos pontos mais positivos do seu código. Ao definir a class GerarPrimo estendendo NumerosPrimos, você reaproveitou o método verificarPrimalidade sem precisar reescrever nenhuma lógica. O mesmo vale para a class VerificarPrimo, que herda o comportamento base e adiciona apenas a responsabilidade de exibir a mensagem com System.out.println. Esse reaproveitamento é exatamente o espírito da Orientação a Objetos em Java.

O método void listarPrimos com o parâmetro limiteSuperior também está correto e bem nomeado, o que facilita bastante a leitura do código por qualquer pessoa que o encontre depois.

Outro ponto positivo está dentro do laço for no método verificarPrimalidade, em que você usou a condição i multiplicado por i sendo menor ou igual a numero. Essa abordagem reduz o número de iterações necessárias e torna a verificação de primalidade mais eficiente do que percorrer todos os valores até numero.

Uma dica interessante para tornar a intenção do código ainda mais clara é utilizar o método Math.sqrt() no lugar da multiplicação. Veja este exemplo:


int limite = (int) Math.sqrt(numero);

for (int i = 2; i <= limite; i++) {
if (numero % i == 0) {
return false;
}
}

Neste trecho, Math.sqrt(numero) calcula a raiz quadrada do valor recebido e armazena o resultado na variável limite, deixando explícito para qualquer leitor do código por que o laço encerra naquele ponto. O comportamento é o mesmo, mas a legibilidade melhora bastante.

No método main da class TestePrimos, você instanciou corretamente os objetos com new, chamou verificarPrimo para o objeto numero1, usou gerarProximoPrimo para encontrar o proximoNumero após 17 e ainda listou todos os primos até o limiteSuperior de 30 com listarPrimos. O uso de System.out.println está bem aplicado em todos os pontos do fluxo, deixando a saída clara e organizada.

No geral, sua solução demonstra uma compreensão sólida dos conceitos de herança, reaproveitamento de métodos e verificação de primalidade em Java. Você está no caminho certo e com uma base muito boa para evoluir ainda mais.

Você chegou a testar o código com outros valores além de 17 e 30 para validar o comportamento em casos diferentes, como números negativos ou o valor zero?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!