Domanda Problema progetto convertitore valuta.

Stato
Discussione chiusa ad ulteriori risposte.

Marioac71

Utente Bronze
14 Novembre 2016
11
2
2
32
Salve a tutti,
Frequento il terzo anno di un istituto tecnico industriale indirizzo informatico. Visto che le cose a scuola proseguono in maniera abbastanza lenta e vista la mia "curiosità", mi sono portato avanti con gli studi del linguaggio java; anche se la mia conoscenza a oggi è davvero scarsa.
Ho iniziato a seguire la playlist java di fcamuso, e mi sono divertito a sperimentare alcuni programmi. In particolare sto realizzando un convertitore valuta che inserita una cifra e, specificata se essa è in dollaro o euro, la converte in dollaro o euro.
Allora il problema sta nella struttura IF, che dovrebbe verificare se la cifra inserita è in euro o in dollaro. Come potete vedere ho tentato di risolvere il problema con due metodi:
Nel primo metodo se il carattere moneta è uguale a euro esegui .... altrimenti se è uguale a dollaro esegui... altrimenti ripeti lo scanner char. In questo metodo il problema è che mi dice che la variabile euro non è stata inizializzata.
Nel secondo metodo ho tentanto con string, se la string inizia con eu esegui .... altrimenti se inizia con do esegui... altrimenti ripeti lo scanner string. In questo metodo il problema è che dopo aver inserito la parola il programma termina. Ho riunito tutti i metodo che ho sperimentato in questo codice, spero che riuscirete ad aiutarmi e magari a farmi capire dove è lo sbaglio ve ne sarei grato. Spero di essere stato abbastanza chiaro. Vi chiedo di non soffermarvi sui nomi inseriti alle varie variabili, visto che si tratta solo di un test :)
Java:
import java.util.Scanner;

public class ConvertitoreDollaroEuroEuroDollaro {
   
    //Programma che converte una cifra in euro o dollaro, in dollaro o euro.

    public static void main(String[] args) {
        // Si definiscono le variabili e le costanti:
        // Sono valori double perché possono contenere cifre con la virgola.
       
        double cifra; // La variabile cifra da convertire.
        double tasso_di_conversione_Euro_Dollaro = 1.3; // La costante tasso_di_conversione_Euro_Dollaro
        double tasso_di_conversione_Dollaro_Euro = 0.8; // La costante tasso_di_conversione_Dollaro_Euro
        double cifraconvertita;
        String tipo;
        char moneta;
        char euro;
        char dollaro;
       
       
       
        
       
//Si definisce il valore della cifra.
       
        Scanner inputNumScanner = new Scanner(System.in);
          System.out.println("Digita la cifra da convertire: ");
          cifra = inputNumScanner.nextDouble();
// FIN QUI FUNZIONA
         
          /*Tutti i metodi hanno problemi con l'IF.*/
         
          //Metodo con Scanner char 1
          Scanner scanner = new Scanner(System.in);
          System.out.println("La cifra da convertire è in euro o dollaro? ");
          moneta = scanner.next().charAt(0);
         
          //Metodo con Scanner char 2
          Scanner inputCharScanner = new Scanner(System.in);
           System.out.println("La cifra da convertire è in euro o dollaro? ");
          moneta = (char) inputCharScanner.nextInt();
         
          /*Metodo if per lo scanner CHAR. Questo metodo prevede che se la parola moneta è uguale a
          euro verrà eseguita la conversione in dollaro, se la parola moneta è uguale a dollaro verrà
          eseguita la conversione in euro */
         
          if (moneta==euro){
              cifraconvertita=(cifra*tasso_di_conversione_Euro_Dollaro);
              
                 
                 } else if (moneta==dollaro) {
                 
                     cifraconvertita=(cifra*tasso_di_conversione_Dollaro_Euro);
                 
                 } else {
                       
                     /*QUI VA INSERITO UN PERCORSO DI RIPETIZIONE, PERCHE' SIGNIFICA CHE COME TESTO
                      NON E' STATO INSERITO NE' EURO NE' DOLLARO
                      */
                     }
         
          // Metodo Scanner string
          Scanner scan = new Scanner(System.in);
          System.out.println("La cifra inserita è in euro o dollaro? ");
          tipo = scan.nextLine();
          // Altro Scanner String
          Scanner a = new  Scanner(System.in);
          System.out.println("La cifra inserita è in euro o dollaro? ");
          tipo = a.nextLine();
         
          /* QUESTO IF PREVEDE CHE SE LA PAROLA INIZIA CON EU VERRA' FATTA LA CONVERSIONE IN DOLLARO
           ALTRIMENTI SE INIZIA CON DO VERRA' FATTA IN EURO. IL PROBLEMA E' CHE DOPO AVER INSERITO
           DI CHE TIPO E' LA CIFRA IL PROGRAMMA TERMINA.
           */
          if (tipo.startsWith("eu")){
         cifraconvertita=(cifra*tasso_di_conversione_Euro_Dollaro);
         
            
            } else if (tipo.startsWith("do")) {
            
                cifraconvertita=(cifra*tasso_di_conversione_Dollaro_Euro);
            
            } else {
                  
                /*QUI VA INSERITO UN PERCORSO DI RIPETIZIONE, PERCHE' SIGNIFICA CHE COME TESTO
                 NON E' STATO INSERITO NE' EURO NE' DOLLARO
                 */
         
            }
    }
}
 
Mi è sembrato di notare che le variabili 'euro' e 'dollaro' non siano state avvalorate, quindi intanto ti dovrebbe riportare errore nella prima condizione. Per risolverlo basta inserire il valore intero ASCII oppure direttamente il carattere.
Secondo me conviene usare il numero decimale così puoi usare il secondo metodo per il prelievo del carattere da input.
Se devi fare un continuo controllo finchè non viene inserito uno dei due caratteri, ti conviene fare un ciclo
Java:
// dichiaro le variabili in modo leggermente più compatto e leggibile
double numero, numeroConvertito; // La variabile cifra da convertire.
double tasso_di_conversione_Euro_Dollaro = 1.3; // La costante tasso_di_conversione_Euro_Dollaro
double tasso_di_conversione_Dollaro_Euro = 0.8; // La costante tasso_di_conversione_Dollaro_Euro
int moneta, euro, dollaro
char validatore = '';

// chiedo in input il numero
Scanner inputNumScanner = new Scanner(System.in);
System.out.println("Digita il numero da convertire: ");
numero = inputNumScanner.nextDouble();

// raggruppo i controlli dentro il while e aggiungo una condizione OR
while(validatore != euro || validatore != dollaro){
    Scanner inputCharScanner = new Scanner(System.in);
    System.out.println("La cifra da convertire è in euro o dollaro? ");
    moneta = inputCharScanner.nextInt();
}

// una volta che ci siamo accertati di aver inserito uno dei due caratteri, facciamo i dovuti controlli
if( moneta == euro){
    numeroConvertito=( numero * tasso_di_conversione_Dollaro_Euro );
    System.out.println("L'equivalente in dollari è: " + numeroConvertito);
}
else{
    numeroConvertito=( numero * tasso_di_conversione_Euro_Dollaro );
    System.out.println("L'equivalente in euro è: " + numeroConvertito);
}
 
Mi è sembrato di notare che le variabili 'euro' e 'dollaro' non siano state avvalorate, quindi intanto ti dovrebbe riportare errore nella prima condizione. Per risolverlo basta inserire il valore intero ASCII oppure direttamente il carattere.
Secondo me conviene usare il numero decimale così puoi usare il secondo metodo per il prelievo del carattere da input.
Se devi fare un continuo controllo finchè non viene inserito uno dei due caratteri, ti conviene fare un ciclo
Java:
// dichiaro le variabili in modo leggermente più compatto e leggibile
double numero, numeroConvertito; // La variabile cifra da convertire.
double tasso_di_conversione_Euro_Dollaro = 1.3; // La costante tasso_di_conversione_Euro_Dollaro
double tasso_di_conversione_Dollaro_Euro = 0.8; // La costante tasso_di_conversione_Dollaro_Euro
int moneta, euro, dollaro
char validatore = '';

// chiedo in input il numero
Scanner inputNumScanner = new Scanner(System.in);
System.out.println("Digita il numero da convertire: ");
numero = inputNumScanner.nextDouble();

// raggruppo i controlli dentro il while e aggiungo una condizione OR
while(validatore != euro || validatore != dollaro){
    Scanner inputCharScanner = new Scanner(System.in);
    System.out.println("La cifra da convertire è in euro o dollaro? ");
    moneta = inputCharScanner.nextInt();
}

// una volta che ci siamo accertati di aver inserito uno dei due caratteri, facciamo i dovuti controlli
if( moneta == euro){
    numeroConvertito=( numero * tasso_di_conversione_Dollaro_Euro );
    System.out.println("L'equivalente in dollari è: " + numeroConvertito);
}
else{
    numeroConvertito=( numero * tasso_di_conversione_Euro_Dollaro );
    System.out.println("L'equivalente in euro è: " + numeroConvertito);
}
Pensavo che euro dovesse essere definito come char e non come int! Grazie, anche se invece di un ciclo (non avendolo ancora studiato) avevo pensato semplicemente ad un else che portava a un repeat dello scanner.

Mi è sembrato di notare che le variabili 'euro' e 'dollaro' non siano state avvalorate, quindi intanto ti dovrebbe riportare errore nella prima condizione. Per risolverlo basta inserire il valore intero ASCII oppure direttamente il carattere.
Secondo me conviene usare il numero decimale così puoi usare il secondo metodo per il prelievo del carattere da input.
Se devi fare un continuo controllo finchè non viene inserito uno dei due caratteri, ti conviene fare un ciclo
Java:
// dichiaro le variabili in modo leggermente più compatto e leggibile
double numero, numeroConvertito; // La variabile cifra da convertire.
double tasso_di_conversione_Euro_Dollaro = 1.3; // La costante tasso_di_conversione_Euro_Dollaro
double tasso_di_conversione_Dollaro_Euro = 0.8; // La costante tasso_di_conversione_Dollaro_Euro
int moneta, euro, dollaro
char validatore = '';

// chiedo in input il numero
Scanner inputNumScanner = new Scanner(System.in);
System.out.println("Digita il numero da convertire: ");
numero = inputNumScanner.nextDouble();

// raggruppo i controlli dentro il while e aggiungo una condizione OR
while(validatore != euro || validatore != dollaro){
    Scanner inputCharScanner = new Scanner(System.in);
    System.out.println("La cifra da convertire è in euro o dollaro? ");
    moneta = inputCharScanner.nextInt();
}

// una volta che ci siamo accertati di aver inserito uno dei due caratteri, facciamo i dovuti controlli
if( moneta == euro){
    numeroConvertito=( numero * tasso_di_conversione_Dollaro_Euro );
    System.out.println("L'equivalente in dollari è: " + numeroConvertito);
}
else{
    numeroConvertito=( numero * tasso_di_conversione_Euro_Dollaro );
    System.out.println("L'equivalente in euro è: " + numeroConvertito);
}
Ho provato, assegnando a moneta,euro e dollaro come valore 0, però dopo aver inserito di che tipo è la moneta mi riporta questo errore:
Java:
Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at ConvertitoreEuroDollaroDollaroEuro.main(ConvertitoreEuroDollaroDollaroEuro.java:20)
 
Non è che DEVE essere usato come int, alla fine non cambia granchè.
Comunque nella documentazione ufficiale di java, riguardo i metodi 'nextDouble()' e 'nextInt()', sta scritto questo
InputMismatchException -- if the next token does not match the Integer regular expression, or is out of range

Pagina per nextInt()
Pagina per nextDouble()

Sotto ci sono pure degli esempi che ti fanno capire che valori inserire
 
Salve a tutti,
Frequento il terzo anno di un istituto tecnico industriale indirizzo informatico. Visto che le cose a scuola proseguono in maniera abbastanza lenta e vista la mia "curiosità", mi sono portato avanti con gli studi del linguaggio java; anche se la mia conoscenza a oggi è davvero scarsa.
Ho iniziato a seguire la playlist java di fcamuso, e mi sono divertito a sperimentare alcuni programmi. In particolare sto realizzando un convertitore valuta che inserita una cifra e, specificata se essa è in dollaro o euro, la converte in dollaro o euro.
Allora il problema sta nella struttura IF, che dovrebbe verificare se la cifra inserita è in euro o in dollaro. Come potete vedere ho tentato di risolvere il problema con due metodi:
Nel primo metodo se il carattere moneta è uguale a euro esegui .... altrimenti se è uguale a dollaro esegui... altrimenti ripeti lo scanner char. In questo metodo il problema è che mi dice che la variabile euro non è stata inizializzata.
Nel secondo metodo ho tentanto con string, se la string inizia con eu esegui .... altrimenti se inizia con do esegui... altrimenti ripeti lo scanner string. In questo metodo il problema è che dopo aver inserito la parola il programma termina. Ho riunito tutti i metodo che ho sperimentato in questo codice, spero che riuscirete ad aiutarmi e magari a farmi capire dove è lo sbaglio ve ne sarei grato. Spero di essere stato abbastanza chiaro. Vi chiedo di non soffermarvi sui nomi inseriti alle varie variabili, visto che si tratta solo di un test :)
Java:
import java.util.Scanner;

public class ConvertitoreDollaroEuroEuroDollaro {
 
    //Programma che converte una cifra in euro o dollaro, in dollaro o euro.

    public static void main(String[] args) {
        // Si definiscono le variabili e le costanti:
        // Sono valori double perché possono contenere cifre con la virgola.
     
        double cifra; // La variabile cifra da convertire.
        double tasso_di_conversione_Euro_Dollaro = 1.3; // La costante tasso_di_conversione_Euro_Dollaro
        double tasso_di_conversione_Dollaro_Euro = 0.8; // La costante tasso_di_conversione_Dollaro_Euro
        double cifraconvertita;
        String tipo;
        char moneta;
        char euro;
        char dollaro;
     
     
     
      
     
//Si definisce il valore della cifra.
     
        Scanner inputNumScanner = new Scanner(System.in);
          System.out.println("Digita la cifra da convertire: ");
          cifra = inputNumScanner.nextDouble();
// FIN QUI FUNZIONA
       
          /*Tutti i metodi hanno problemi con l'IF.*/
       
          //Metodo con Scanner char 1
          Scanner scanner = new Scanner(System.in);
          System.out.println("La cifra da convertire è in euro o dollaro? ");
          moneta = scanner.next().charAt(0);
       
          //Metodo con Scanner char 2
          Scanner inputCharScanner = new Scanner(System.in);
           System.out.println("La cifra da convertire è in euro o dollaro? ");
          moneta = (char) inputCharScanner.nextInt();
       
          /*Metodo if per lo scanner CHAR. Questo metodo prevede che se la parola moneta è uguale a
          euro verrà eseguita la conversione in dollaro, se la parola moneta è uguale a dollaro verrà
          eseguita la conversione in euro */
       
          if (moneta==euro){
              cifraconvertita=(cifra*tasso_di_conversione_Euro_Dollaro);
            
               
                 } else if (moneta==dollaro) {
               
                     cifraconvertita=(cifra*tasso_di_conversione_Dollaro_Euro);
               
                 } else {
                     
                     /*QUI VA INSERITO UN PERCORSO DI RIPETIZIONE, PERCHE' SIGNIFICA CHE COME TESTO
                      NON E' STATO INSERITO NE' EURO NE' DOLLARO
                      */
                     }
       
          // Metodo Scanner string
          Scanner scan = new Scanner(System.in);
          System.out.println("La cifra inserita è in euro o dollaro? ");
          tipo = scan.nextLine();
          // Altro Scanner String
          Scanner a = new  Scanner(System.in);
          System.out.println("La cifra inserita è in euro o dollaro? ");
          tipo = a.nextLine();
       
          /* QUESTO IF PREVEDE CHE SE LA PAROLA INIZIA CON EU VERRA' FATTA LA CONVERSIONE IN DOLLARO
           ALTRIMENTI SE INIZIA CON DO VERRA' FATTA IN EURO. IL PROBLEMA E' CHE DOPO AVER INSERITO
           DI CHE TIPO E' LA CIFRA IL PROGRAMMA TERMINA.
           */
          if (tipo.startsWith("eu")){
         cifraconvertita=(cifra*tasso_di_conversione_Euro_Dollaro);
       
          
            } else if (tipo.startsWith("do")) {
          
                cifraconvertita=(cifra*tasso_di_conversione_Dollaro_Euro);
          
            } else {
                
                /*QUI VA INSERITO UN PERCORSO DI RIPETIZIONE, PERCHE' SIGNIFICA CHE COME TESTO
                 NON E' STATO INSERITO NE' EURO NE' DOLLARO
                 */
       
            }
    }
}
Ho considerato moneta,euro e dollaro come char e gli ho assegnato 0 di valore. Poi ho cambiato lo scanner char con questo codice:
Codice:
Scanner scanner = new Scanner(System.in);
              System.out.println("La cifra da convertire è in euro o dollaro? ");
              moneta = scanner.next().charAt(0);
Funziona tutto perfettamente. Purtroppo ho dovuto rimuovere il while perché ogni volta che inserivo di che tipo era la moneta me lo faceva ripetere, anche se il valore inserito era esatto.
 
Funziona tutto perfettamente. Purtroppo ho dovuto rimuovere il while perché ogni volta che inserivo di che tipo era la moneta me lo faceva ripetere, anche se il valore inserito era esatto.
Ovvio, perchè non hai dato il giusto valore alle due variabili!
Dovevi assegnarci il carattere corrispondente agli euro e ai dollari, oppure uno diverso che comunque indica distintamente entrambi

Stavo pensando pure io di utilizzare lo scanner per come hai fatto te, forse sarebbe stato meglio usarlo direttamente prima
 
Ovvio, perchè non hai dato il giusto valore alle due variabili!
Dovevi assegnarci il carattere corrispondente agli euro e ai dollari, oppure uno diverso che comunque indica distintamente entrambi

Stavo pensando pure io di utilizzare lo scanner per come hai fatto te, forse sarebbe stato meglio usarlo direttamente prima
Sto riscontrando un problema.. dopo aver inserito tipo di moneta non mi esegue ma l'if anche se la condizione è soddisfatta ma solo l'else...
ecco il codice..
Codice:
package convertitorevaluta1;
import java.util.Scanner;

/**
*
* @author Mario
*/
public class ConvertitoreValuta1 {

 
    public static void main(String[] args) {
        //Dichiaro le variabili e le costanti.
        double cifra, cifraconvertita;
        double tassodiconversione_euro_Dollaro=1.4;
        double tassodiconversione_Dollaro_euro=0.8;
        char euro=0, dollaro=0, moneta=0;
      
        // INPUT CIFRA
        {
            Scanner inputNumScanner = new Scanner(System.in);
        System.out.println("Digita il numero da convertire: ");
        cifra = inputNumScanner.nextDouble();
        }
        // INPUT TIPO DI MONETA
        {
        Scanner scanner = new Scanner(System.in);
              System.out.println("La cifra da convertire è in euro o dollaro? ");
              moneta = scanner.next().charAt(0);
          
         if (moneta==euro) {
            cifraconvertita=(cifra*tassodiconversione_euro_Dollaro);
            System.out.println("L'equivalente in dollari è: " + cifraconvertita);
         }
                else
                cifraconvertita=(cifra*tassodiconversione_Dollaro_euro);
         System.out.println("L'equivalente in euro è: " + cifraconvertita);
                      
            }
        }
      
        }
 
Tu hai scritto
Java:
char euro=0, dollaro=0, moneta=0;

Dovevi scrivere qualcosa tipo
Java:
char euro= asciiEuro, dollaro= asciiDollaro, moneta=0;

E io ti avevo detto
Ovvio, perchè non hai dato il giusto valore alle due variabili!
Dovevi assegnarci il carattere corrispondente agli euro e ai dollari, oppure uno diverso che comunque indica distintamente entrambi
 
Tu hai scritto
Java:
char euro=0, dollaro=0, moneta=0;

Dovevi scrivere qualcosa tipo
Java:
char euro= asciiEuro, dollaro= asciiDollaro, moneta=0;

E io ti avevo detto
Ho provato anche inserendo € e $ come valori a euro e dollaro, ma il problema persiste. Esegue solo e unicamente l'else e mai l'if.
 
Hai provato a fare debug?
Oppure semplicemente a farti stampare la variabile 'moneta' dopo l'inserimento da input?
Vedi cosa stampa e regolati di conseguenza.
Il codice sembra essere buono, quindi il problema sono i valori delle variabili
 
Questo è il tuo ultimo codice sistemato:
Java:
package convertitorevaluta1;
import java.util.Scanner;

public class ConvertitoreValuta1 {
    public static void main(String[] args) {
        //Dichiaro le variabili e le costanti.
        double cifra, cifraconvertita;
        double tassodiconversione_euro_Dollaro=1.4;
        double tassodiconversione_Dollaro_euro=0.8;
        char euro='€', dollaro='$', moneta=0;

        // INPUT CIFRA
        {
            Scanner inputNumScanner = new Scanner(System.in);
            System.out.println("Digita il numero da convertire: ");
            cifra = inputNumScanner.nextDouble();
        }
        // INPUT TIPO DI MONETA
        {
            Scanner scanner = new Scanner(System.in);
            System.out.println("La cifra da convertire è in euro o dollaro? ");
            moneta = scanner.next().charAt(0);

            if (moneta==euro) {
                cifraconvertita=(cifra*tassodiconversione_euro_Dollaro);
                System.out.println("L'equivalente in dollari è: " + cifraconvertita);
            }
            else { // mancavano le parentesi graffe
                cifraconvertita=(cifra*tassodiconversione_Dollaro_euro);
                System.out.println("L'equivalente in euro è: " + cifraconvertita);
            }
        }
    }
}


Questo invece è una review dei metodi da te proposti nel primo post, leggi i commenti:
Java:
import java.util.Scanner;

public class Convertitore {

    public static void main(String[] args) {

        // Costanti di conversione
        double euro_to_dollar = 1.07; // 1 euro = 1.07 dollari
        double dollar_to_euro = 0.93; // 1 dollaro = 0.93 euro

        // Apro uno scanner da System.in
        // È buona norma aprirne uno solo e riusarlo quante volte ti pare
        Scanner scanner = new Scanner(System.in);

        // Chiedo la cifra da convertire
        System.out.println("Digita la cifra da convertire: ");
        double value = scanner.nextDouble();

        // Lista dei metodi che hai provato, versione corretta
        // Metodo 1: scanner char
        System.out.println("La cifra da convertire è in euro o dollaro? (€ o $)");
        char from_1 = scanner.next().charAt(0);
        if (from_1 == '$') {
            double to_euro_1 = value * dollar_to_euro;
            System.out.println(value + "$ = " + to_euro_1 + "€");
        }
        else if (from_1 == '€') {
            double to_dollar_1 = value * euro_to_dollar;
            System.out.println(value + "€ = " + to_dollar_1 + "$");
        }
        else {
            System.out.println("Errore: valuta non conosciuta");
        }

        // NOTA: ho lasciato sporcizia nel buffer System.in
        // non è stata una gran scelta usare .next()
        scanner.nextLine(); // clear System.in

        // Metodo 2: scanner int castato in char
        // char moneta = (char) inputCharScanner.nextInt();
        // Scanner si aspetta di leggere un numero intero, ma in input non ci sono numeri interi
        // Non è una buona scelta

        // Metodo 3: scanner string (string startsWith)
        System.out.println("La cifra da convertire è in euro o dollaro? (eu___ o do___)");
        String from_3 = scanner.nextLine();
        if (from_3.startsWith("eu")) {
            double to_euro_3 = value * dollar_to_euro;
            System.out.println(value + "$ = " + to_euro_3 + "€");
        }
        else if (from_3.startsWith("do")) {
            double to_dollar_3 = value * euro_to_dollar;
            System.out.println(value + "€ = " + to_dollar_3 + "$");
        }
        else {
            System.out.println("Errore: valuta non conosciuta");
        }

        // Metodo 4: altro scanner string (string equals)
        System.out.println("La cifra da convertire è in euro o dollaro? (euro o dollar)");
        String from_4 = scanner.nextLine();
        if (from_4.equals("euro")) {
            double to_euro_4 = value * dollar_to_euro;
            System.out.println(value + "$ = " + to_euro_4 + "€");
        }
        else if (from_4.equals("dollar")) {
            double to_dollar_4 = value * euro_to_dollar;
            System.out.println(value + "€ = " + to_dollar_4 + "$");
        }
        else {
            System.out.println("Errore: valuta non conosciuta");
        }

        // Metodo 5: altro scanner string (ignora uppercase e lowercase)
        System.out.println("La cifra da convertire è in euro o dollaro? (Euro, euro, EURO o Dollaro, DoLlArO, DOLLARO)");
        String from_5 = scanner.nextLine();
        if (from_4.toLowerCase().equals("euro")) {
            double to_euro_5 = value * dollar_to_euro;
            System.out.println(value + "$ = " + to_euro_5 + "€");
        }
        else if (from_4.equals("dollar")) {
            double to_dollar_5 = value * euro_to_dollar;
            System.out.println(value + "€ = " + to_dollar_5 + "$");
        }
        else {
            System.out.println("Errore: valuta non conosciuta");
        }

    }
}
 
Hai provato a fare debug?
Oppure semplicemente a farti stampare la variabile 'moneta' dopo l'inserimento da input?
Vedi cosa stampa e regolati di conseguenza.
Il codice sembra essere buono, quindi il problema sono i valori delle variabili
Ho provato ma niente.. non so più cosa fare :(

Questo è il tuo ultimo codice sistemato:
Java:
package convertitorevaluta1;
import java.util.Scanner;

public class ConvertitoreValuta1 {
    public static void main(String[] args) {
        //Dichiaro le variabili e le costanti.
        double cifra, cifraconvertita;
        double tassodiconversione_euro_Dollaro=1.4;
        double tassodiconversione_Dollaro_euro=0.8;
        char euro='€', dollaro='$', moneta=0;

        // INPUT CIFRA
        {
            Scanner inputNumScanner = new Scanner(System.in);
            System.out.println("Digita il numero da convertire: ");
            cifra = inputNumScanner.nextDouble();
        }
        // INPUT TIPO DI MONETA
        {
            Scanner scanner = new Scanner(System.in);
            System.out.println("La cifra da convertire è in euro o dollaro? ");
            moneta = scanner.next().charAt(0);

            if (moneta==euro) {
                cifraconvertita=(cifra*tassodiconversione_euro_Dollaro);
                System.out.println("L'equivalente in dollari è: " + cifraconvertita);
            }
            else { // mancavano le parentesi graffe
                cifraconvertita=(cifra*tassodiconversione_Dollaro_euro);
                System.out.println("L'equivalente in euro è: " + cifraconvertita);
            }
        }
    }
}


Questo invece è una review dei metodi da te proposti nel primo post, leggi i commenti:
Java:
import java.util.Scanner;

public class Convertitore {

    public static void main(String[] args) {

        // Costanti di conversione
        double euro_to_dollar = 1.07; // 1 euro = 1.07 dollari
        double dollar_to_euro = 0.93; // 1 dollaro = 0.93 euro

        // Apro uno scanner da System.in
        // È buona norma aprirne uno solo e riusarlo quante volte ti pare
        Scanner scanner = new Scanner(System.in);

        // Chiedo la cifra da convertire
        System.out.println("Digita la cifra da convertire: ");
        double value = scanner.nextDouble();

        // Lista dei metodi che hai provato, versione corretta
        // Metodo 1: scanner char
        System.out.println("La cifra da convertire è in euro o dollaro? (€ o $)");
        char from_1 = scanner.next().charAt(0);
        if (from_1 == '$') {
            double to_euro_1 = value * dollar_to_euro;
            System.out.println(value + "$ = " + to_euro_1 + "€");
        }
        else if (from_1 == '€') {
            double to_dollar_1 = value * euro_to_dollar;
            System.out.println(value + "€ = " + to_dollar_1 + "$");
        }
        else {
            System.out.println("Errore: valuta non conosciuta");
        }

        // NOTA: ho lasciato sporcizia nel buffer System.in
        // non è stata una gran scelta usare .next()
        scanner.nextLine(); // clear System.in

        // Metodo 2: scanner int castato in char
        // char moneta = (char) inputCharScanner.nextInt();
        // Scanner si aspetta di leggere un numero intero, ma in input non ci sono numeri interi
        // Non è una buona scelta

        // Metodo 3: scanner string (string startsWith)
        System.out.println("La cifra da convertire è in euro o dollaro? (eu___ o do___)");
        String from_3 = scanner.nextLine();
        if (from_3.startsWith("eu")) {
            double to_euro_3 = value * dollar_to_euro;
            System.out.println(value + "$ = " + to_euro_3 + "€");
        }
        else if (from_3.startsWith("do")) {
            double to_dollar_3 = value * euro_to_dollar;
            System.out.println(value + "€ = " + to_dollar_3 + "$");
        }
        else {
            System.out.println("Errore: valuta non conosciuta");
        }

        // Metodo 4: altro scanner string (string equals)
        System.out.println("La cifra da convertire è in euro o dollaro? (euro o dollar)");
        String from_4 = scanner.nextLine();
        if (from_4.equals("euro")) {
            double to_euro_4 = value * dollar_to_euro;
            System.out.println(value + "$ = " + to_euro_4 + "€");
        }
        else if (from_4.equals("dollar")) {
            double to_dollar_4 = value * euro_to_dollar;
            System.out.println(value + "€ = " + to_dollar_4 + "$");
        }
        else {
            System.out.println("Errore: valuta non conosciuta");
        }

        // Metodo 5: altro scanner string (ignora uppercase e lowercase)
        System.out.println("La cifra da convertire è in euro o dollaro? (Euro, euro, EURO o Dollaro, DoLlArO, DOLLARO)");
        String from_5 = scanner.nextLine();
        if (from_4.toLowerCase().equals("euro")) {
            double to_euro_5 = value * dollar_to_euro;
            System.out.println(value + "$ = " + to_euro_5 + "€");
        }
        else if (from_4.equals("dollar")) {
            double to_dollar_5 = value * euro_to_dollar;
            System.out.println(value + "€ = " + to_dollar_5 + "$");
        }
        else {
            System.out.println("Errore: valuta non conosciuta");
        }

    }
}
Grazie mille!!!!
 
Stato
Discussione chiusa ad ulteriori risposte.