values - return void c#
c#error de devolución "no todas las rutas de código devuelven un valor" (7)
El compilador no obtiene la intrincada lógica en la que regresas en la última iteración del ciclo, por lo que cree que puedes salir del ciclo y terminar no devolviendo nada.
En lugar de regresar en la última iteración, simplemente devuelve true 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á comprobando si num == 20
en la última condición, pero debería haber marcado si j == 20
. También comprobando si num % j == 0
era superfloo, ya que eso siempre es cierto cuando llegas allí.
Intento escribir un código que devuelva si un entero determinado es divisible de manera uniforme 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;
}
}
}
Me gusta vencer a los caballos muertos, pero quería hacer un punto adicional:
En primer lugar, el problema es que no se han abordado todas las condiciones de su estructura de control. Básicamente, estás diciendo si a, luego esto, si es b, entonces esto. Fin. Pero ¿y si ninguno? No hay forma de salir (es decir, no cada ''ruta'' devuelve un valor).
Mi punto adicional es que este es un ejemplo de por qué debería apuntar a una salida única si es posible. En este ejemplo, harías algo como esto:
bool result = false;
if(conditionA)
{
DoThings();
result = true;
}
else if(conditionB)
{
result = false;
}
else if(conditionC)
{
DoThings();
result = true;
}
return result;
Así que aquí, siempre se devuelve una declaración y el método siempre sale en un solo lugar. Un par de cosas que considerar ... debe asegurarse de que su valor de salida sea válido en cada ruta o al menos aceptable. Por ejemplo, esta estructura de decisión solo tiene en cuenta tres posibilidades, pero la única salida también puede actuar como su instrucción else final. O lo hace? Debe asegurarse de que el valor de retorno final sea válido en todas las rutas. Esta es una manera mucho mejor de abordarla frente a tener 50 millones de puntos de salida.
Mira este. Es el operador ternario en C #.
bool BooleanValue = (num % 3 != 0) ? true : false;
Esto es solo para mostrar el principio; puede devolver True o False (o incluso entero o cadena) dependiendo del resultado de algo en el lado izquierdo del signo de interrogación. Buen operador, esto.
Tres alternativas juntas:
public bool test1()
{
int num = 21;
bool BooleanValue = (num % 3 != 0) ? true : false;
return BooleanValue;
}
public bool test2()
{
int num = 20;
bool test = (num % 3 != 0);
return test;
}
Incluso más corto:
public bool test3()
{
int num = 20;
return (bool)(num % 3 != 0);
}
O simplemente haz esto:
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;
}
else
return false;
}
}
También experimenté este problema y encontré la solución fácil de ser
public string ReturnValues()
{
string _var = ""; // Setting an innitial value
if (.....) // Looking at conditions
{
_var = "true"; // Re-assign the value of _var
}
return _var; // Return the value of var
}
Esto también funciona con otros tipos de devolución y ofrece la menor cantidad de problemas
El valor inicial que elegí fue un valor de recuperación y pude volver a asignar el valor tantas veces como fuera necesario.
Te falta una declaración de return
.
Cuando el compilador mira su código, ve una tercera ruta (el else
que no codificó) que podría ocurrir pero que no devuelve un valor. Por not all code paths return a value
tanto, not all code paths return a value
.
Para mi solución sugerida, puse una return
después de que termine el ciclo. El otro punto obvio - agregar un else
que tenía un valor de return
al if-else-if
- rompería el ciclo for
.
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
}
class Program
{
double[] a = new double[] { 1, 3, 4, 8, 21, 38 };
double[] b = new double[] { 1, 7, 19, 3, 2, 24 };
double[] result;
public double[] CheckSorting()
{
for(int i = 1; i < a.Length; i++)
{
if (a[i] < a[i - 1])
result = b;
else
result = a;
}
return result;
}
static void Main(string[] args)
{
Program checkSorting = new Program();
checkSorting.CheckSorting();
Console.ReadLine();
}
}
Esto debería funcionar, de lo contrario, recibí el error de que no todas las rutas de códigos devuelven un valor. Por lo tanto, establezco el resultado como el valor devuelto, que se establece como B o A dependiendo de cuál es verdadero