Error del compilador de C#: "no todas las rutas de código devuelven un valor"
Estoy intentando escribir un código que devuelva si un número entero determinado es divisible entre 1 y 20,
pero sigo recibiendo el siguiente error:
error CS0161: 'ProblemFive.isTwenty(int)': no todas las rutas de código devuelven un valor
Aquí está mi código:
public static bool isTwenty(int num)
{
for(int j = 1; j <= 20; j++)
{
if(num % j != 0)
{
return false;
}
else if(num % j == 0 && num == 20)
{
return true;
}
}
}
Te falta una return
declaración.
Cuando el compilador mira su código, ve una tercera ruta ( else
para la que usted no codificó) que podría ocurrir pero no devuelve un valor. Por eso not all code paths return a value
.
Para la solución sugerida, puse un return
después de que finalice el ciclo. El otro punto obvio (agregar un valor else
que tenga return
un valor if-else-if
) rompería el for
ciclo.
public static bool isTwenty(int num)
{
for(int j = 1; j <= 20; j++)
{
if(num % j != 0)
{
return false;
}
else if(num % j == 0 && num == 20)
{
return true;
}
}
return false; //This is your missing statement
}
El compilador no entiende la lógica intrincada a la que regresa en la última iteración del ciclo, por lo que piensa que podría salir del ciclo y terminar sin devolver nada.
En lugar de regresar en la última iteración, simplemente devuelve verdadero después del ciclo:
public static bool isTwenty(int num) {
for(int j = 1; j <= 20; j++) {
if(num % j != 0) {
return false;
}
}
return true;
}
Nota al margen: hay un error lógico en el código original. Estás verificando si está num == 20
en la última condición, pero deberías haberlo verificado j == 20
. También comprobar si num % j == 0
era superfluo, ya que eso siempre es cierto cuando llegas allí.