Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Problema con pasar de euros a pesetas o pesetas a euros

El ejercicio dice esto:

.-Crear la clase Moneda con los siguientes métodos:
• deEurosAPesetas: método que introduciéndole una cantidad de euros y devuelve el equivalente en pesetas.
• dePesetasAEuros: método que introduciéndole una cantidad de pesetas te devuelve el equivalente en euros.

Nota: 1 euro equivale a 166 pesetas.


Lo que quiero he pensado es que al principio me deje elegir entre si pasar a pesetas a euros o euros a pesetas , Lo hice con if porque creo que tiene que funcionar tambien ahora pensandolo se puede por switch .Como lo arreglariais?
y de ahi introducir la cantidad y que lo calcule. Pero no sale

import java.io.IOException;
import java.util.Scanner;


public class ptsaeur {
private static String pts;
public static void main (String []args) throws IOException{

System.out.println("Bienvenido al programa para pasar de euros a pesetas o de pesetas a euros ");
System.out.println("si quiere pasar de pesetas a euros introduce por pantalla : pts");
System.out.println("si quiere pasar de euros a pesetas introduce por pantalla : eur");
Scanner sc = new Scanner(System.in);
String cadena = sc.nextLine();

if( cadena == pts )
{

System.out.print("Introduzca pts: ");
double pts2 = sc.nextDouble();


double totalpts= (pts2 *1.66)/1 ;

System.out.println(totalpts+"eur");


}
else
{
double eur2;
System.out.print("Introduzca eur: ");
eur2 = sc.nextDouble();


double totaleur= (pts2 *1.66)/1 ;

System.out.println(totaleur+"eur");
}
}


}

enero 26, 2014 | Registered Commentergaborone

Guenas.

La variable pts no la has inicializado.

La comparación no debería hacerse con == que compara referencias sino con el metodo equals().

El calculo es evidentemente incorrecto y ademas haces el mismo para euros y para pesetas.

Te han pedido dos métodos pero lo metes todo en main()

Un saludo

enero 26, 2014 | Unregistered CommenterPaposo

El código que has puesto no compila, y además no se ajusta a lo que te piden, que es una clase llamada Moneda, con dos métodos, deEurosAPesetas y dePesetasAEuros.

Para comparar una cadena con otra no puedes hacer "==", porque las cadenas son objetos de tipo String, no son datos primitivos. Por tanto, lo que comparas con "==" son referencias a objetos, no los objetos en sí mismos. En otras palabras, lo que estarías comparando es si el lado izquierdo de la igualdad apunta al mismo objeto que el lado derecho.

En su lugar, una cadena se compara así:


("pts").equals(cadena)

Lo de poner el literal delante, con todo lo antinatural que puede parecer, te sirve para que, si la variable cadena es null, no obtengas una excepción en tiempo de ejecución.

En cuanto al if o el case. En general, si sólo hay dos opciones, tiene más sentido usar un if () {} else {}. Lo que también es cierto es que en tu programa podría escribirse cualquier cosa, no sólo "pts" o "eur", y el case podrías usarlo para, con la opción default, imprimir un mensaje de error.

Por último. Te lo dice el enunciado y te lo he dicho al principio, pero te lo repito: te están pidiendo que escribas dos métodos, pesetasAEuros y eurosAPesetas. Y que los uses. Echa cuentas de dónde tienes que llamarlos. :-)

enero 26, 2014 | Registered Commenterrickiees

A ver he estado dandole vueltas y mas o menos creo que he conseguido una parte , lo unico que no me llega es a leer el numero que tiene de pesetas . Nose que estara mal . El metodo esta bien asi segun lo que pide? . Es que soy nuevo en esto y estoy un poco verde . Muchas gracias

import java.util.Scanner;


public class Moneda {

public void deEurosAPesetas(){
double euros ;

double total=euros /1.66;

}
public void dePesetasAEuros(){
double pts;
double total2= pts*1.66;

}
public static void main (String []args){

System.out.println("Introduce si pts si quieres pasar de pesetas a euros ");
System.out.println("Introduce si eur si quieres pasar de euros a pesetas ");
Scanner sc = new Scanner(System.in);
String cadena = sc.nextLine();

if(( "pts").equals(cadena) )
{
System.out.println("introduce el numero de pesetas");
cambio.pts = sc.nextDouble();

double total=cambio.pts*1.66;
}
}
}

enero 26, 2014 | Unregistered Commentergaborone

Buenas,

La parte de detectar si se mete pts esta bien, pero hay muchisimas cosas que no tienen sentido en el codigo:

-Crear variable nativas en metodos locales sin inicializarlas.
-Para llamar desde un main estatico a los metodos estos tienen que ser tambien estaticos
-Que es cambio.pts?
-El cambio de euro a peseta es 1.66????????????????????? No sera mas bien 166?

Te dejo el codigo funcionando, solo te queda anadirle el euro


public class Moneda {

public static double deEurosAPesetas(double eur) {
return eur / 1.66;
}

public static double dePesetasAEuros(double pts) {
return pts * 1.66;
}

public static void main(String[] args) {

System.out.println("Introduce si pts si quieres pasar de pesetas a euros ");
System.out.println("Introduce si eur si quieres pasar de euros a pesetas ");
Scanner sc = new Scanner(System.in);
String cadena = sc.nextLine();

if (("pts").equals(cadena)) {
System.out.println("introduce el numero de pesetas");
double pts = sc.nextDouble();

System.out.println("Resultado: " + dePesetasAEuros(pts) + " EUR");
}
}
}

Un saludo

enero 27, 2014 | Unregistered CommenterUnoPorAhi

Ah, y poner 166 en lugar de 1.66

enero 27, 2014 | Unregistered CommenterUnoPorAhi

Guenas.

Yo empezaría por que los metodos static de conversión aceptaran la cantidad inicial.
Hacerlos static pero usar un valor guardado en la clase es mala idea. Un metodo static debería recibir todos los datos y si usa alguno comun para todos (como el cambio) utilizarlo, pero jamas cargar en un metodo static como main unos datos independientes y despues usarlos en la llamada al metodo.

Si acabas de empezar entiendo que cueste pillarlo pero no quedaras como un idiota si preguntas porque digo esto. Muchos lectores te explicaran el concepto subyacente y si no lo hacen ellos lo haré yo porque considero muy importante que asimiles el concepto.

De todos modos, antes de preguntar temas que se ven a la legua, intenta esforzarte un poco para que todos te respetemos. Haz alguna pregunta inteligente (aunque sin conocimiento), que te lo he puesto a huevo para ello, y veras que la gente se vuelca en ti para ayudarte.

Aquí se ayuda al principiante, pero no al jeta.

Un saludo y animo!!!!
Paposo

enero 27, 2014 | Unregistered CommenterPaposo

Hola , en mi primer lugar daros las gracias a las respuestas , soy un estudiante de fp superior y estoy empezando . Porque no puedo cargar un método como static .? Probe public double pesetasaeutos (double pesetas) y funciona sin el static . Pero porque el quitarlo ?

enero 30, 2014 | Unregistered Commentergaborone

Desde el main no se ve que estes instanciando la clase, luego los metodos no los podrias usar (error de compilacion) salvo que sean static.
Para que lo veas claro, si no son static tendrias que hacer en el main:

Moneda moneda = new Moneda();
moneda.dePesetasAEuros(pts)

Si dices que te funciona es porque has cambiado tu codigo (el codigo que posteaste antes no compilaba ni de lejos). Nos puedes poner como lo tienes ahora mismo?

enero 30, 2014 | Unregistered CommenterUnoPorAhi

Guenas.

La diferencia entre metodos static y los de instancia es que los métodos normales estan asociados a una instancia (objeto) de la clase. Como si fueran un duplicado para cada objeto. Los metodos static van asociados a la clase, es decir al patrón de todos los objetos pero no a un objeto concreto.

Desde una instancia siempre puedes acceder a un método o variable static de la clase que lo ha creado, pero a la inversa no porque pueden haber un numero indeterminado de objetos de esa clase y el método static al estar asociado a la clase no sabría a cual de sus objetos se refiere.

Por otra parte, las variables static como forman parte de la clase (que solo hay una) son compartidas por todos sus objetos. Varios objetos distintos pueden modificar su valor y por tanto usarlos para pasar valores a un método no es una forma segura de trabajar.

Un saludo

enero 30, 2014 | Unregistered CommenterPaposo

Buenas y gracias otra vez , lo cambie de libras a kilos y de kilos a libras y lo hice así. Que me recomendais hacerlo así o con static? Yo veo mas fácil sin static pero cual es el que mas se usa?

public class Peso {
public double kilos;
public double libras;

public double deKilosALibras(double kilos){
return kilos *2.2;
}
public double deLibrasAKilos(double libras){
return libras/2.2;
}

public static void main(String args[])
{
Peso cambio=new Peso();
Scanner en = new Scanner(System.in);
String x;
System.out.println("Introduzca lib si quieres pasar de libras a euros o introduzca kg si quiere pasar de kilos a libras :");
x = en.nextLine();

if ((x).equals("kg")){

System.out.println("introduzca cuantos kilos");
double kilos=en.nextDouble();
System.out.println("el cambio es " +cambio.deKilosALibras(kilos)+" libras");
}
else if ((x).equals("lib")){
System.out.println("introduzca cuantas libras");
double libras =en.nextDouble();
System.out.println("el cambio es " +cambio.deLibrasAKilos(libras)+"kilos");
}
else
System.out.println("Ha introducido otra cosa");
}
}

enero 30, 2014 | Unregistered Commentergaborone

La mejor manera de no enredarse con Java, sobre todo al principio, consiste en tener los conceptos básicos muy claros.
Inevitablemente es obligado estudiar con mucho detalle los manuales:

http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

enero 30, 2014 | Registered Commenterchoces