Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] CalculadoraDeFatorial

dei uma pesquisada e agr vou colocar o Scanner dentro de um try que com isso evita a nescessidade de ficar fechando sempre

package br.com.nadson.desafiosc3.principal;

import java.util.Scanner;

public class CalculadoraDeFatorial {

    public static long calcularFatorial(int n) {
        validarNumero(n);
        long fatorial = 1;

        for (int i = 1; i <= n; i++) {
            fatorial *= i;
        }
        return fatorial;
    }

    public static void validarNumero(int n) {
        if (n < 0) {
            throw new IllegalArgumentException("O número deve ser não-negativo.");
        }
    }

    public static int lerNumero(Scanner entrada) {
        System.out.print("Digite um número não-negativo para calcular o fatorial: ");

        while (!entrada.hasNextInt()) {
            System.out.println("Entrada inválida. Digite um número inteiro.");
            entrada.next();
        }

        return entrada.nextInt();
    }

    public static void main(String[] args) {
        try (Scanner entrada = new Scanner(System.in)) {

            int numero = lerNumero(entrada);

            try {
                long resultado = calcularFatorial(numero);
                System.out.println("O fatorial de " + numero + " é " + resultado);
            } catch (IllegalArgumentException e) {
                System.out.println("Erro: " + e.getMessage());
            }
        }
    }
}
2 respostas
solução!

Olá, Nadson! Como vai?

Parabéns pela resolução da atividade!

Observei que você utilizou muito bem a validação de entrada com tratamento de exceções e ainda compreendeu a importância de separar a lógica em métodos para deixar o código mais organizado e reutilizável.

Uma dica interessante para o futuro é considerar o uso de recursão como alternativa ao cálculo iterativo do fatorial. Assim:

public static long calcularFatorialRecursivo(int n) {
    validarNumero(n);
    if (n == 0 || n == 1) {
        return 1;
    }
    return n * calcularFatorialRecursivo(n - 1);
}

Isso faz com que o código fique mais elegante e demonstre outra forma de resolver o mesmo problema, ampliando seu repertório de soluções.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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

obrigado pela dica vou lembrar de usar nas proximas vezes