ayuda programa en java

tengo que hacer un programa que te pide divisa a cambiar nombre apellidos i demas cosas... la primera parte la tengo hecha funciona i todo va bien (en el metodo main), pero entonces el ejercicio pide que crees otro metodo (getCanvi) i que alli hagas todo el proceso de cambiar de una moneda a otro (los calculos) i esto entonces haga un return

lo que tengo hecho de momento es esto:

import java.io.*;



public class Canvi {



public static void main(String[] args) throws IOException {



// la classe BufferedReader serveix per llegir del

// teclat

BufferedReader entrada=new BufferedReader(

new InputStreamReader(System.in));

// Demanem informació a l'usuari i la recollim a la

// variable divisain.

System.out.println("Quina moneda desitgeu canviar? "+

"(E)uros, (D)olars o (I)ens?");

String divisain=entrada.readLine();

while (!(divisain.equals("E") || divisain.equals("e")

|| divisain.equals("I") || divisain.equals("i")

|| divisain.equals("D") || divisain.equals("d"))) {

System.out.println("Quina moneda desitgeu canviar? "+

"(E)uros, (D)olars o (I)ens?");

divisain=entrada.readLine();}

// carreguem la moneda canviada

System.out.println("Quina moneda voleu rebre? "+

"(E)uros, (D)olars o (I)ens?");

String divisaout=entrada.readLine();

while (!(divisaout.equals("E") || divisaout.equals("e")

|| divisaout.equals("I") || divisaout.equals("i")

|| divisaout.equals("D") || divisaout.equals("d"))) {

System.out.println("Quina moneda voleu rebre? "+

"(E)uros, (D)olars o (I)ens?");

divisaout=entrada.readLine();}

// nom

System.out.println("Introdueixi aqui el seu nom");

String nom=entrada.readLine();

// cognom

System.out.println("Introdueixi aqui el seu cognom");

String cognom=entrada.readLine();

// dni

System.out.println("Quin es el seu DNI?");

String dni=entrada.readLine();

// quantitat

System.out.println("Quantitat de diners a canviar?");

String quantitat=entrada.readLine();

String cadena=quantitat;

double doubleCalers;

try {

doubleCalers=Integer.parseInt(quantitat);

} catch(Exception e) {}



}

public static double getCanvi(double doubleCalers, String divisain, String divisaout) {

if (divisain.equals("D") || divisain.equals("d")){

if (divisaout.equals("E") || divisaout.equals ("e")){

System.out.println(divisain*0,6727)"€");}

if (divisaout.equals("I") || divisaout.equals ("i")){

System.out.println(divisain*90,805)"Yens");}

if (divisaout.equals("D") || divisaout.equals("d")){

System.out.println(divisain"Dolars");}

}

if (divisain.equals("I") || divisain.equals("i")){

if ((divisaout.equals("D") || divisaout.equals("d")){

System.out.println(divisain*0,011013"Dolars");}

if (divisaout.equals("E") || divisaout.equals("e")){

System.out.println(divisain*0,0074"€");}

if (divisaout.equals("I") || divisaout.equals("i")){

System.out.println(divisain"Yens");}

}

if (divisain.equals("E") || divisain.equals("e")){

if (divisaout.equals("D") || divisaout.equals("d")){

System.out.println(divisain*1,4865"Dolars");}

if (divisaout.equals("I") || divisaout.equals("i")){

System.out.println(divisain*134,9859"Yens");}

if (divisaout.equals("E") || divisaout.equals("e")){

System.out.println(divisain"Euros");}

}

}

}


e puesto varios if dentro de otro if... i yo creo que esta bien hecho, pero no me deja compilar por problemas de sintaxi i luego hay otro problema que aunque me sale los errores i ejecute el programa no me devuelve los println... (supongo que esto sera debido a que deberia poner un return...) pero como deberia ponerlo? :-? :-?
No ves las trazas del println porque en el main no llegas a llamar nunca a tu método getCanvi, con lo que nunca se ejecuta.

Los errores de compilación son, seguramente, porque en dicho método no devuelves nada, cuando en la firma del mismo especificas que pretendes devolver un double (public static double getCanvi...). Además tienes algunos println de este tipo: System.out.println(divisain"Dolars"), el compilador entiende que quieres concatenar dos cadenas y no estás usando el operador necesario, el +.
fua muchisimas gracias xD ara que comentas los errores los veo demasiado tontos :P pero es que hace 2 dias que empeze con esto :)

una dudilla, como hago para devolver el double?, podria poner un void i que salieran los println???
Usa return (el_valor_double) en tu método getCanvi y santas pascuas. Al llamar a la función desde el main, puedes recoges el valor (double) que te devuelva (los println te van a salir igualmente, no tiene relación) y hacer con él lo que sea que necesites hacer.
Y usa equalsIgnoreCase en vez de equals y te ahorras comprobar mayúsculas y minúsculas por separado :)

O bien haz antes

divisain = divisain.toLowerCase();
ey, a ver xD me da un error ara de sintaxis en este trozo de codigo

String cadena=quantitat;
double doubleCalers = quantitat;
try {
doubleCalers = Integer.parseInt(cadena);
} catch(Exception e) {}


yo creo que el cambio de string a double se tiene que hacer de este modo... pero no me acepta me dice "incompatible files"
Es mejor que consultes un manual de Java, los hay a montones, o sino, la API de Sun. En cualquier caso, ahí va:

package Conversor;

public class Conversor {
   public static void main() {
      String quantitat="200";
      String cadena=quantitat;
      double doubleCalers;
      try {
         doubleCalers = new Double(quantitat).doubleValue();
      } catch(NumberFormatException e) {
         System.out.println("Error en el formato de la cifra introducida: " + quantitat);
      }
   }
}


El constructor de la clase Double en la API de Sun: http://java.sun.com/j2se/1.4.2/docs/api ... ang.String)
Jabatus escribió:Es mejor que consultes un manual de Java, los hay a montones, o sino, la API de Sun. En cualquier caso, ahí va:

package Conversor;

public class Conversor {
   public static void main() {
      String quantitat="200";
      String cadena=quantitat;
      double doubleCalers;
      try {
         doubleCalers = new Double(quantitat).doubleValue();
      } catch(NumberFormatException e) {
         System.out.println("Error en el formato de la cifra introducida: " + quantitat);
      }
   }
}


El constructor de la clase Double en la API de Sun: http://java.sun.com/j2se/1.4.2/docs/api ... ang.String)


no, si el profesor nos pasa manuales i e estado mirando... pero al final me quedaba eso que tenia puesto arriba... i no me salia... pero porque pones en la 3 linea

String quantitat="200"; ????

el 200... a que se debe? :-?
Se refiere al tamaño que tendrá el Double doubleCalers.
IvanMSN escribió:Se refiere al tamaño que tendrá el Double doubleCalers.


Qué???

A ver, ha puesto el 200 como ejemplo y yasta. Los Double no son arrays que tengas que inicializar a un tamaño ni nada así.

Si haces
double myDouble = new Double("200").doubleValue();
creas un myDouble que vale 200 y yasta :P

Si quieres pasar de String a double, no uses métodos del objeto Integer, usa los del Double directamente. En tu ejemplo:

String cadena=quantitat;
double doubleCalers = 0; //es aconsejable inicializar siempre las variables
try {
doubleCalers = Double.parseDouble(cadena);
} catch(Exception e) {
e.printStackTrace(); //Acostumbrate a poner esto como mínimo en los catch.
}


Ah, y otra cosa que es una putada en java si no lo sabes. Digamos que tienes:

int x = 5;
int y = 2;
double division = x/y;

pues si ves el valor de 'division', es 2, no 2.5. Porque java divide primero 2 enteros, y el resultado es un entero (la parte decimal se tira), y luego mete ese entero en un double dándote un hermoso 2.0 XD

Para que eso salga bien tienes que hacer

double division = ((double)x)/y;

Así haces un cast forzado de x convirtiéndola en un double. Y al dividir un double por un int ya si te da un double.

Y si quieres notaza, pon varios catch (se evaluan en el orden en que los pongas) :P
String cadena=quantitat;
double doubleCalers = 0; //es aconsejable inicializar siempre las variables
try {
doubleCalers = Double.parseDouble(cadena);
}catch(NumberFormatException e) {
System.out.println("El dato "+cadena+" no es un numero válido");
}catch(Exception e) {
e.printStackTrace(); //Acostumbrate a poner esto como mínimo en los catch.
}
redscare escribió:
IvanMSN escribió:Se refiere al tamaño que tendrá el Double doubleCalers.


Qué???

A ver, ha puesto el 200 como ejemplo y yasta. Los Double no son arrays que tengas que inicializar a un tamaño ni nada así.

Si haces
double myDouble = new Double("200").doubleValue();
creas un myDouble que vale 200 y yasta :P

Si quieres pasar de String a double, no uses métodos del objeto Integer, usa los del Double directamente. En tu ejemplo:

String cadena=quantitat;
double doubleCalers = 0; //es aconsejable inicializar siempre las variables
try {
doubleCalers = Double.parseDouble(cadena);
} catch(Exception e) {
e.printStackTrace(); //Acostumbrate a poner esto como mínimo en los catch.
}


Ah, y otra cosa que es una putada en java si no lo sabes. Digamos que tienes:

int x = 5;
int y = 2;
double division = x/y;

pues si ves el valor de 'division', es 2, no 2.5. Porque java divide primero 2 enteros, y el resultado es un entero (la parte decimal se tira), y luego mete ese entero en un double dándote un hermoso 2.0 XD

Para que eso salga bien tienes que hacer

double division = ((double)x)/y;

Así haces un cast forzado de x convirtiéndola en un double. Y al dividir un double por un int ya si te da un double.

Y si quieres notaza, pon varios catch (se evaluan en el orden en que los pongas) :P
String cadena=quantitat;
double doubleCalers = 0; //es aconsejable inicializar siempre las variables
try {
doubleCalers = Double.parseDouble(cadena);
}catch(NumberFormatException e) {
System.out.println("El dato "+cadena+" no es un numero válido");
}catch(Exception e) {
e.printStackTrace(); //Acostumbrate a poner esto como mínimo en los catch.
}


si, eso de los int lo explico el profesor i to bien, tambien dijo que podiamso hacer

x= 3.00
y=2

blabla= x/y i como la y es .00 lo interpreta como un double i pasa el x de in a double ^^

una dudilla en la parte final dl codigo que estan los println... borro lo d System.out.println i pongo un return para que devuelva el mensaje???
ShinMegami escribió:una dudilla en la parte final dl codigo que estan los println... borro lo d System.out.println i pongo un return para que devuelva el mensaje???


Nomentero. Si tienes todo el código en el método main no hace falta poner return (es public static VOID main). Si has divido el código en dos o más métodos (el main y otros) pues los otros lo lógico es que los otros no sean 'void' y devuelvan algo con un 'return'.
Tienes razón, me he liado xDD

Es que llevo 3 meses sin tocar java :P
bueno, al final e conseguido completar el programa :) gracias por la ayuda xD ya os dire la nota :P vamos, yo creo que pa un 8 o por ahi lo puedo sacar :)
13 respuestas