Error del compilador de C#: "no todas las rutas de código devuelven un valor"

Resuelto user115185 asked hace 10 años • 9 respuestas

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;
        }
    }
}
user115185 avatar Jan 18 '14 03:01 user115185
Aceptado

Te falta una returndeclaración.

Cuando el compilador mira su código, ve una tercera ruta ( elsepara 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 returndespués de que finalice el ciclo. El otro punto obvio (agregar un valor elseque tenga returnun valor if-else-if) rompería el forciclo.

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
}
 avatar Jan 17 '2014 20:01

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 == 20en la última condición, pero deberías haberlo verificado j == 20. También comprobar si num % j == 0era superfluo, ya que eso siempre es cierto cuando llegas allí.

Guffa avatar Jan 17 '2014 21:01 Guffa