[ Foro de C# ]

Problema con "not all code paths return a value"

06-Sep-2014 07:26
Invitado (NadGo)
1 Respuestas

Hola, estoy haciendo un programa que resuelva la raiz de numero complejos y solo me falta la parte final, sin embargo me aparece un error y no se como solucionarlo

 
static double arg(double x,double y)
{
    if (x >= 0 && y >= 0)
    { return Math.Atan(y / x); }
    if (x <= 0 && y >= 0) 
    { return Math.PI + Math.Atan(y / x); }
    if (x >= 0 && y <= 0) 
    { return 2 * Math.PI + Math.Atan(y / x); }
    if (x <= 0 && y <= 0)
    { return Math.PI + Math.Atan(y / x); }
        }
 


Me dice que en arg not all code paths return a value


07-Sep-2014 17:36
Jose Valdes Sirvent


 
static double arg(double x,double y) 
{ 
       if (x >= 0 && y >= 0) 
       { 
              return Math.Atan(y / x); 
       } 
       if (x <= 0 && y >= 0) 
       { 
              return Math.PI + Math.Atan(y / x); 
        } 
        if (x >= 0 && y <= 0) 
       { 
              return 2 * Math.PI + Math.Atan(y / x); 
       } 
       if (x <= 0 && y <= 0) 
       { 
              return Math.PI + Math.Atan(y / x); 
       }
       return 0; 
} 
 


Esta es la solución buena.
Y por qué es esto? Por que aunque tú, como programador, ya hayas dictaminado que esos if que tienes, ya abarcan todas las soluciones posibles.. el compilador no tiene forma de saber eso, y esa función tiene que devolver sí o sí un valor double.. el compilador piensa que si no entra en ninguno de los if, y llega al final, no devolverá ningún valor.

Es por eso que hay que poner al final un return 0, para que, en caso de no entrar en ninguno de los if, por lo menos que devuelva el valor 0.

Otra forma de solucionarlo sería con;

 
if(sentencia 1)
{}
else if (sentencia 2)
{}
...
else
 


Y poner el return en ese último else. De esa forma, el código sí o sí entrará en alguna condición o en el else, devolviendo así, siempre, algún valor.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)