language from codeFri, 21 Feb 2025

// Método que debería devolver el factorial de un número // Entrada -> un número: 5 // Debería devolver 120 public static int calcularFactorial(int numero) { int factorial = 1; for (int i = 1; i < numero; i++) { factorial *= i; } return factorial; } @Test void calcularFactorial() { int numero = 5; int esperado = 120; int resultado = OperacionesArray.calcularFactorial(numero); assertEquals(esperado, resultado); }

El código que proporcionas está casi correcto, pero hay un pequeño error. El bucle `for` se ejecuta hasta `i < numero`, lo que significa que se salta el número `numero` mismo. Por lo tanto, el factorial se calcula hasta `numero - 1` en lugar de `numero`. Aquí te muestro la corrección: ```java // Método que debería devolver el factorial de un número // Entrada -> un número: 5 // Debería devolver 120 public static int calcularFactorial(int numero) { int factorial = 1; for (int i = 1; i <= numero; i++) { // Cambie i < numero a i <= numero factorial *= i; } return factorial; } ``` Además, es importante mencionar que si el número es negativo, el factorial no es definido en el sentido clásico. En este caso, se puede lanzar una excepción para indicar que el número no es válido. Aquí te muestro una versión más robusta del método: ```java // Método que debería devolver el factorial de un número // Entrada -> un número: 5 // Debería devolver 120 public static int calcularFactorial(int numero) { if (numero < 0) { throw new IllegalArgumentException("El número no es válido"); } int factorial = 1; for (int i = 1; i <= numero; i++) { factorial *= i; } return factorial; } ``` En cuanto al test, está bien escrito. Sin embargo, es importante mencionar que si el número es muy grande, el factorial puede superar el límite de valor máximo de un `int` en Java, lo que provocaría un overflow. En este caso, se puede utilizar una clase `BigInteger` para manejar números más grandes. Aquí te muestro una versión del test que utiliza `BigInteger`: ```java @Test void calcularFactorial() { int numero = 20; BigInteger esperado = new BigInteger("2432902008176640000"); BigInteger resultado = OperacionesArray.calcularFactorial(numero); assertEquals(esperado, resultado); } ``` Recuerda que `BigInteger` es una clase más lenta que `int`, por lo que es importante utilizarla solo cuando sea necesario.

Want to kickstart your project?Use the new AI Studio to create your code