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
finalsignifica che questo valore non può essere modificato durante l'esecuzione
Il Menu Interattivo
Il programma mostra un menu con 6 opzioni:
- Convertire da chilometri a miglia
- Convertire da miglia a chilometri
- Convertire da gradi Celsius a Fahrenheit
- Convertire da gradi Fahrenheit a Celsius
- Convertire valute (euro/dollaro)
- 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();
}
}