Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Java => Mensaje iniciado por: AlvaradoGunner en 23 Enero 2009, 21:39 PM

Título: Array con returns?
Publicado por: AlvaradoGunner en 23 Enero 2009, 21:39 PM
Hola, soy nuevo y bueno me encargaron esto:
Elaborar un programa que incluya métodos para realizar conversiones de temperatura.

   El programa debe contener métodos (con tipo de retorno double) para convertir de Celsius a Fahrenheit y viceversa, de Celsius a Kelvin y viceversa, y finalmente de Fahrenheit a Kelvin y viceversa.

   El método main debe contener al menos una llamada a cada método con su respectiva impresión a pantalla del resultado obtenido.


Trate de hacerlo lo mas "corto"posible.. es decir. no quiero hacer seis metodos.. pero bueno. esta es mi error:
Citar--------------------Configuration: <Default>--------------------
C:\putamadre.java:16: missing return statement
}
^
C:\putamadre.java:27: missing return statement
}
^
C:\putamadre.java:38: missing return statement
}
^
3 errors

Process completed.

Y aqui mi programa:

Citarclass putamadre{
   
// Variables Globales
static int i;
static double resultados[]=new double[1],Celsius=90.0,Kelvin=90.0,Fahr=90.0;

//Método Celsius a F y a K
public static double CelsFahKel(double Fahr,double Kelvin){
   
resultados[0]=(Fahr-32)/(1.8);
resultados[1]=Kelvin-273.15;

for(i=1;i<=2;i++){
   return resultados;
}
}

//Método Fahrenheit a C y a K
public static double FahCelsKel(double Celsius,double Kelvin){
   
resultados[0]=Celsius*1.8+32;
resultados[1]=9/5*Kelvin+32;

for(i=0;i<=1;i++){
   return resultados;
}
}

//Método Kelvin a C y F
public static double KelCelsFah(double Celsius,double Fahr){

resultados[0]=Celsius+273.15;
resultados[1]=(Fahr-32)*5/9;

for(i=0;i<=1;i++){
   return resultados;
}
}

//Método Main
public static void main(String args[]){

CelsFahKel(Fahr,Kelvin);
System.out.println("Celsius a Fahrenheit :"+resultados[0]+" Celsius a Kelvin:"+resultados[1]);
FahCelsKel(Celsius,Kelvin);
System.out.println("Fahrenheit a Celsius:"+resultados[0]+" Fahrenheit a Kelvin:"+resultados[1]);
KelCelsFah(Celsius,Fahr);
System.out.println("Kelvin a Celsius:"+resultados[0]+" Kelvin a Fahrenheit:"+resultados[1]);


}//Fin de Main

}//Fin de clase

Eso seria, se pueden mandar mas de 1 return por metodo?. Cómo?, Tendre que hacer 6 metodos?. Gracias!.
Título: Re: Array con returns?
Publicado por: -Ramc- en 23 Enero 2009, 21:45 PM
No entiendo para que haces fors de una sola vuelta lol y otro de 2 devolviendo valores, es decir, solo puedes devolver un valor por llamada a un método, si quieres devolver mas de uno, devuelve un vector, esto me huele a copy-paste.
Título: Re: Array con returns?
Publicado por: AlvaradoGunner en 23 Enero 2009, 22:04 PM
Bueno. en realidad todos hacen 2 ciclos, yo lo que preguntoe s que si apartir de fors se le puede asignar el valor al arreglo resultados i, y los devuelva. Porcierto, puedes ponerme un ejemplo?
Título: Re: Array con returns?
Publicado por: Amerikano|Cls en 23 Enero 2009, 23:41 PM
Código (java) [Seleccionar]
for(i=1;i<=2;i++){
   return resultados;
}


Esto no tiene sentido, pues al ejecutar el return se saldra de una del método y no alcanzara al otro ciclo es decir al segundo.

Este tambien es otro error que hay:

Código (java) [Seleccionar]
static double resultados[]=new double[1],Celsius=90.0,Kelvin=90.0,Fahr=90.0;

pues la declaracion de un arreglo es como sigue:

Código (java) [Seleccionar]
Tipo_Dato nombre[] = new Tipo_Dato[longitud_Array]

Y sobre lo otro si lo que quieres es devolver todo el array, basta con quitar el for y ya, pero eso si debes modificar el tipo de retorno de cada método para que devuelva un Double[] (arreglo de tipo Double):


Código (java) [Seleccionar]
public static double[] CelsFahKel(double Fahr,double Kelvin){

resultados[0]=(Fahr-32)/(1.8); //asignas los valores
resultados[1]=Kelvin-273.15;

return resultados; //Retorna el arreglo
}


Y para la llamada del método desde el main(), haces esto:

Código (java) [Seleccionar]
public static void main(String args[]){

double[] temp = new double[1];
temp =  CelsFahKel(Fahr,Kelvin);
System.out.println("Celsius a Fahrenheit :"+temp[0]+" Celsius a Kelvin:"+temp[1]);

//Luego vuelves a repetir esto a excepcion de la declaracion del array, para cada metodo.


}


Y ya solo basta con repetir la asignacion y enseguida el print para cada metodo y yap, eso si a cada metodo debes hacerles las modificaciones que acabas de ver ;).

Un salu2 y para la proxima no te haremos tus tareas  :-X
Título: Re: Array con returns?
Publicado por: Ragnarok en 24 Enero 2009, 07:07 AM
Cita de: AlvaradoGunner en 23 Enero 2009, 21:39 PM
Trate de hacerlo lo mas "corto"posible.. es decir. no quiero hacer seis metodos.. pero bueno. esta es mi error:

Antes que nada, esa no es forma de programar, el código que has hecho no es claro y tiene una cohesión muy baja en los métodos que presenta, y el acoplamiento es bastante mejorable.

Java no tiene yield como python, por lo que cada método hace un único return, si quieres devolver varias cosas las tienes que devolver a la vez.

De todas formas con dos métodos te vale, en el primero (debería ser el constructor de la clase conversor) pasas el valor de la temperatura y las unidades en que se mide, y como segundo método haces un get del valor pasando las unidades en que lo quieres. Menos que eso no se puede hacer.