Convertitore unità di misura con menu e switch-case


Convertitore di Unità di Misura - Spiegazione del Codice

Questo programma Java crea un convertitore di unità di misura che permette all'utente di scegliere tra diverse conversioni attraverso un menu interattivo.

Struttura Generale del Programma

Il programma è organizzato come una singola classe con tutto il codice contenuto nel metodo main. Utilizza un ciclo do-while per mostrare ripetutamente il menu fino a quando l'utente non decide di uscire.

Elementi Principali

Import e Costanti

import java.util.Scanner;
final double KM_PER_MIGLIO = 1.609;
  • Scanner: serve per leggere l'input dell'utente dalla tastiera
  • Costante KM_PER_MIGLIO: definisce il rapporto di conversione tra chilometri e miglia (1 miglio = 1,609 km). La parola final significa che questo valore non può essere modificato durante l'esecuzione

Il Menu Interattivo

Il programma mostra un menu con 6 opzioni:

  1. Convertire da chilometri a miglia
  2. Convertire da miglia a chilometri
  3. Convertire da gradi Celsius a Fahrenheit
  4. Convertire da gradi Fahrenheit a Celsius
  5. Convertire valute (euro/dollaro)
  6. Uscire dal programma (opzione 0)

Struttura del Ciclo Principale

do {
    // Mostra il menu
    // Legge la scelta dell'utente
    // Esegue l'operazione scelta
} while (scelta != 0);

Il ciclo do-while garantisce che il menu venga mostrato almeno una volta e continui a ripetersi finché l'utente non inserisce 0 per uscire.

Le Conversioni nel Dettaglio

1. Conversioni di Distanza (Case 1 e 2)

  • KM → Miglia: divide i chilometri per 1,609
  • Miglia → KM: moltiplica le miglia per 1,609

2. Conversioni di Temperatura (Case 3 e 4)

  • °C → °F: usa la formula F = C × 9/5 + 32
  • °F → °C: usa la formula C = (F - 32) × 5/9

3. Conversione Valute (Case 5)

Questa è la conversione più complessa perché:

  • Chiede l'importo da convertire
  • Chiede il tasso di cambio (quanti dollari vale 1 euro)
  • Chiede la direzione della conversione (E per euro→dollari, D per dollari→euro)
  • Controllo errori: verifica che il tasso sia maggiore di zero
  • Da euro a dollari: moltiplica per il tasso
  • Da dollari a euro: divide per il tasso

4. Gestione degli Errori

Il programma include diversi controlli:

  • Tasso di cambio invalido: controlla che sia maggiore di zero
  • Direzione invalida: verifica che sia "E" o "D"
  • Scelta menu invalida: gestisce opzioni non previste con il default

Caratteristiche Tecniche Importanti

  • Uso di trim().toUpperCase(): pulisce l'input dell'utente da spazi e lo converte in maiuscolo per evitare errori di digitazione
  • Chiusura dello Scanner: in.close() alla fine libera le risorse
  • Variabili con nomi descrittivi: rendono il codice più leggibile
  • Commenti esplicativi: aiutano a comprendere la logica del programma

Questo programma è un ottimo esempio di come utilizzare le strutture di controllo (cicli e condizioni) per creare un'applicazione interattiva e utile!


import java.util.Scanner;

/**
 * Convertitore di unità di misura con menu (versione SENZA metodi).
 *
 * Menu:
 *   1. KM -> MIGLIA
 *   2. MIGLIA -> KM
 *   3. °C -> °F
 *   4. °F -> °C
 *   5. VALUTA (euro/dollaro)
 *   0. ESCI
 */
public class ConvertitoreUnitaSenzaMetodi {

    public static void main(String[] args) {

        // Costante: 1 miglio = 1,609 km (final = non può più essere modificata)
        final double KM_PER_MIGLIO = 1.609;

        Scanner in = new Scanner(System.in);

        int scelta;

        // do-while: il menu va mostrato almeno una volta
        // e ripetuto finché l'utente non sceglie 0.
        do {
            System.out.println();
            System.out.println("=== CONVERTITORE DI UNITA' ===");
            System.out.println("1. KM -> MIGLIA");
            System.out.println("2. MIGLIA -> KM");
            System.out.println("3. °C -> °F");
            System.out.println("4. °F -> °C");
            System.out.println("5. VALUTA (euro/dollaro)");
            System.out.println("0. ESCI");
            System.out.print("Scelta: ");
            scelta = in.nextInt();

            switch (scelta) {

                case 1:
                    System.out.print("Distanza in km: ");
                    double km = in.nextDouble();
                    double miglia = km / KM_PER_MIGLIO;
                    System.out.println(km + " km = " + miglia + " miglia");
                    break;

                case 2:
                    System.out.print("Distanza in miglia: ");
                    double mi = in.nextDouble();
                    double kmRis = mi * KM_PER_MIGLIO;
                    System.out.println(mi + " miglia = " + kmRis + " km");
                    break;

                case 3:
                    System.out.print("Temperatura in °C: ");
                    double c = in.nextDouble();
                    double fRis = c * 9.0 / 5.0 + 32;
                    System.out.println(c + " °C = " + fRis + " °F");
                    break;

                case 4:
                    System.out.print("Temperatura in °F: ");
                    double f = in.nextDouble();
                    double cRis = (f - 32) * 5.0 / 9.0;
                    System.out.println(f + " °F = " + cRis + " °C");
                    break;

                case 5:
                    System.out.print("Importo: ");
                    double importo = in.nextDouble();
                    System.out.print("Tasso di cambio (dollari per 1 euro): ");
                    double tasso = in.nextDouble();
                    System.out.print("Direzione (E = da euro, D = da dollari): ");
                    String direzione = in.next().trim().toUpperCase();

                    // Un tasso <= 0 non ha senso (e con 0 divideremmo per zero!)
                    if (tasso <= 0) {
                        System.out.println("Errore: il tasso deve essere maggiore di zero.");
                    } else if (direzione.equals("E")) {
                        // da euro a dollari: si MOLTIPLICA per il tasso
                        double dollari = importo * tasso;
                        System.out.println(importo + " EUR = " + dollari + " USD");
                    } else if (direzione.equals("D")) {
                        // da dollari a euro: si DIVIDE per il tasso
                        double euro = importo / tasso;
                        System.out.println(importo + " USD = " + euro + " EUR");
                    } else {
                        System.out.println("Direzione non valida: usa E oppure D.");
                    }
                    break;

                case 0:
                    System.out.println("Arrivederci!");
                    break;

                default:
                    System.out.println("Voce di menu non valida, riprova.");
            }

        } while (scelta != 0);

        in.close();
    }
}