Menu
Coddy logo textTech

Enum e metodi degli Enum

Fa parte della sezione Programmazione orientata agli oggetti del percorso Java di Coddy. Lezione 50 di 87.

Un enum (enumerazione) è un tipo speciale di classe che rappresenta un insieme fisso di costanti. Invece di usare numeri interi o stringhe arbitrari per rappresentare opzioni come i giorni della settimana o gli stati degli ordini, gli enum forniscono valori leggibili e sicuri rispetto al tipo.

enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

Day today = Day.MONDAY;
System.out.println(today);  // Stampa: MONDAY

Gli enum sono più che semplici costanti: sono classi complete. Puoi aggiungere campi, costruttori e metodi:

enum Size {
    SMALL(10), MEDIUM(20), LARGE(30);
    
    private int price;
    
    Size(int price) {
        this.price = price;
    }
    
    public int getPrice() {
        return price;
    }
}

System.out.println(Size.MEDIUM.getPrice());  // Stampa: 20

Ogni enum include metodi integrati utili. Il metodo values() restituisce un array di tutte le costanti, mentre valueOf() converte una stringa nella costante enum corrispondente. Il metodo ordinal() restituisce la posizione della costante (a partire da 0):

for (Day d : Day.values()) {
    System.out.println(d + " is at position " + d.ordinal());
}

Day day = Day.valueOf("FRIDAY");  // Converte la stringa in un enum

Gli enum sono ideali quando hai un insieme noto e fisso di valori che non cambierà durante l'esecuzione, rendendo il tuo codice più sicuro ed espressivo rispetto all'uso di semplici costanti.

challenge icon

Sfida

Facile

Costruiamo un sistema di ordinazione per una caffetteria che mostri la potenza degli enum con campi, costruttori e metodi. Creerai un enum CoffeeSize che memorizza le informazioni sui prezzi e un sistema per elaborare gli ordini dei clienti.

Organizzerai il codice in tre file:

  • CoffeeSize.java: crea un enum che rappresenta le dimensioni del caffè con i relativi prezzi. Il tuo enum deve avere tre costanti: SMALL, MEDIUM e LARGE, con prezzi rispettivamente di 2.50, 3.50 e 4.50.

    Ogni dimensione ha bisogno di un campo price privato (double), di un costruttore per assegnargli un valore e di un metodo getPrice() per recuperarlo. Aggiungi anche un metodo getDescription() che restituisca una stringa nel formato: [size name] - $[price] (per esempio: SMALL - $2.5)

  • Order.java: crea una classe che rappresenta un ordine di caffè. Un Order ha due campi privati: customerName (String) e size (CoffeeSize). Includi un costruttore per inizializzare entrambi i campi e metodi getter per ciascuno.

    Aggiungi un metodo getReceipt() che restituisca una stringa su più righe:

    Order for: [customerName]
    Size: [size description from getDescription()]
    Total: $[price from the size]
  • Main.java: dai vita alla tua caffetteria! Riceverai due input: il nome di un cliente (String) e il nome di una dimensione (String, ad esempio "SMALL", "MEDIUM" o "LARGE").

    Per prima cosa, usa CoffeeSize.valueOf() per convertire la stringa della dimensione nella costante enum corrispondente. Crea un Order con il nome del cliente e la dimensione, poi stampa la ricevuta.

    Dopo aver stampato la ricevuta, stampa una riga vuota, quindi mostra il menu completo iterando su tutti i valori di CoffeeSize usando il metodo values(). Per ogni dimensione, stampa la relativa descrizione su una riga separata.

Riceverai due input nell'ordine seguente: il nome del cliente e il nome della dimensione (uno tra "SMALL", "MEDIUM" o "LARGE").

Nota come l'enum racchiuda sia l'identità della dimensione sia il relativo prezzo, in modo molto più ordinato rispetto all'uso di costanti separate o numeri magici sparsi nel codice!

Provalo tu

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Leggi gli input
        String customerName = scanner.nextLine();
        String sizeName = scanner.nextLine();
        
        // TODO: Converti sizeName nell'enum CoffeeSize usando valueOf()
        
        // TODO: Crea un Order con il nome del cliente e la dimensione
        
        // TODO: Stampa la ricevuta
        
        // TODO: Stampa una riga vuota
        
        // TODO: Mostra il menu completo scorrendo tutti i valori di CoffeeSize
        // Suggerimento: usa CoffeeSize.values() per ottenere tutte le costanti dell'enum
        
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Java online