Menu
Coddy logo textTech

Enums und Enum-Methoden

Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy. Lektion 50 von 87.

Ein enum (Aufzählung) ist ein spezieller Klassentyp, der eine feste Menge von Konstanten darstellt. Anstatt beliebige Ganzzahlen oder Zeichenfolgen zu verwenden, um Optionen wie Wochentage oder Bestellstatus darzustellen, bieten Enums typsichere, gut lesbare Werte.

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

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

Enums sind mehr als einfache Konstanten: Sie sind vollständige Klassen. Du kannst ihnen Felder, Konstruktoren und Methoden hinzufügen:

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());  // Gibt aus: 20

Jedes Enum verfügt über nützliche integrierte Methoden. Die Methode values() gibt ein Array aller Konstanten zurück, während valueOf() eine Zeichenfolge in die passende Enum-Konstante umwandelt. Die Methode ordinal() gibt die Position der Konstante zurück (beginnend bei 0):

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

Day day = Day.valueOf("FRIDAY");  // Konvertiert String zu Enum

Enums sind ideal, wenn du eine bekannte, festgelegte Menge von Werten hast, die sich zur Laufzeit nicht ändert, und machen deinen Code sicherer und ausdrucksstärker als die Verwendung einfacher Konstanten.

challenge icon

Aufgabe

Einfach

Erstellen wir ein Bestellsystem für ein Café, das die Leistungsfähigkeit von Enums mit Feldern, Konstruktoren und Methoden demonstriert. Du erstellst ein CoffeeSize-Enum, das Preisinformationen speichert, sowie ein System zur Verarbeitung von Kundenbestellungen.

Du organisierst deinen Code auf drei Dateien:

  • CoffeeSize.java: Erstelle ein Enum, das Kaffeegrößen mit den zugehörigen Preisen repräsentiert. Dein Enum sollte drei Konstanten enthalten: SMALL, MEDIUM und LARGE mit den Preisen 2.50, 3.50 beziehungsweise 4.50.

    Jede Größe benötigt ein privates price-Feld (double), einen Konstruktor, der dieses setzt, und eine getPrice()-Methode, um den Wert abzurufen. Füge außerdem eine getDescription()-Methode hinzu, die einen String im Format [size name] - $[price] zurückgibt (zum Beispiel: SMALL - $2.5)

  • Order.java: Erstelle eine Klasse, die eine Kaffeebestellung repräsentiert. Ein Order-Objekt verfügt über zwei private Felder: customerName (String) und size (CoffeeSize). Füge einen Konstruktor hinzu, der beide Felder initialisiert, sowie Getter-Methoden für jedes Feld.

    Füge eine getReceipt()-Methode hinzu, die einen mehrzeiligen String zurückgibt:

    Order for: [customerName]
    Size: [size description from getDescription()]
    Total: $[price from the size]
  • Main.java: Erwecke dein Café zum Leben! Du erhältst zwei Eingaben: einen Kundennamen (String) und einen Größennamen (String wie "SMALL", "MEDIUM" oder "LARGE").

    Verwende zuerst CoffeeSize.valueOf(), um den Größen-String in die entsprechende Enum-Konstante umzuwandeln. Erstelle eine Order mit dem Kundennamen und der Größe und gib anschließend den Beleg aus.

    Gib nach dem Beleg eine leere Zeile aus und zeige dann das vollständige Menü an, indem du mithilfe der CoffeeSize-Methode über alle values()-Werte iterierst. Gib für jede Größe ihre Beschreibung in einer eigenen Zeile aus.

Du erhältst zwei Eingaben in dieser Reihenfolge: den Kundennamen und den Größennamen (einen von "SMALL", "MEDIUM" oder "LARGE").

Beachte, wie das Enum sowohl die Identität der Größe als auch den zugehörigen Preis kapselt – deutlich übersichtlicher, als separate Konstanten oder magische Zahlen im gesamten Code zu verwenden!

Probier es selbst

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Eingaben lesen
        String customerName = scanner.nextLine();
        String sizeName = scanner.nextLine();
        
        // TODO: Konvertiere sizeName mit valueOf() in das CoffeeSize-Enum
        
        // TODO: Erstelle eine Order mit dem Kundennamen und der Größe
        
        // TODO: Drucke die Quittung
        
        // TODO: Drucke eine leere Zeile
        
        // TODO: Zeige das vollständige Menü an, indem du alle CoffeeSize-Werte durchiterierst
        // Hint: Verwende CoffeeSize.values(), um alle Enum-Konstanten zu erhalten
        
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Java-Compiler