Enumerations

Enumerations sind eine spezielle Art von Datentypen in Java, die es ermöglichen, eine Gruppe von konstanten Werten zu definieren. Sie sind besonders nützlich, wenn Sie eine feste Menge von Werten haben, die sich nicht ändern sollen. In Java werden Enumerationen mit dem Schlüsselwort enum definiert.

1. Aufzählungstypen Studenten

Für die Studiengänge an der HNU sollen für unseren Kontext die folgenden Regelstudienzeiten gelten:

  • DSM: 8 Semester

  • DEM: 7 Semester

  • Wirtschaftsinformatik: 6 Semester

  • Systems Engineering: 5 Semester

  • Betriebswirtschaft: 4 Semester

Wichtig

🚩 Bilden Sie diesen Sachverhalt durch einen Aufzählungstyp im Code ab.

Erstellen Sie eine Klasse Student mit den Attributen Name, Vorname, Matrikelnummer und Studiengang. Erstellen Sie weiterhin ein Testprogramm, darin 10 Objekte vom Typ Student, speichern diese in ein Array und geben die Inhalte des Arrays aus. Verwenden Sie für die Ausgabe eine entsprechende toString() -Methode der Klasse Student.

Lösung anzeigen
Studiengang.java
 1// Enum for available degree programs and their standard study duration.
 2public enum Studiengang {
 3    DSM(8),
 4    DEM(7),
 5    WIRTSCHAFTSINFORMATIK(6),
 6    SYSTEMS_ENGINEERING(5),
 7    BETRIEBSWIRTSCHAFT(4);
 8
 9    // Number of semesters in the regular study plan.
10    private final int regelstudienzeit;
11
12    // Stores the duration for each enum value.
13    Studiengang(int regelstudienzeit) {
14        this.regelstudienzeit = regelstudienzeit;
15    }
16
17    // Returns the regular study duration in semesters.
18    public int getRegelstudienzeit() {
19        return regelstudienzeit;
20    }
21}
Student.java
 1// Represents one student with personal data and degree program.
 2public class Student {
 3    // Last name of the student.
 4    private String name;
 5    // First name of the student.
 6    private String vorname;
 7    // Unique student ID number.
 8    private int matrikelnummer;
 9    // Degree program the student is enrolled in.
10    private Studiengang studiengang;
11
12    // Creates a student with all required values.
13    public Student(String name, String vorname, int matrikelnummer, Studiengang studiengang) {
14        this.name = name;
15        this.vorname = vorname;
16        this.matrikelnummer = matrikelnummer;
17        this.studiengang = studiengang;
18    }
19
20    // Returns a readable text output for printing student info.
21    @Override
22    public String toString() {
23        return vorname + " " + name
24                + " (Mat.-Nr.: " + matrikelnummer + ")"
25                + " – " + studiengang
26                + " (Regelstudienzeit: " + studiengang.getRegelstudienzeit() + " Semester)";
27    }
28}
StudentTest.java
 1// Simple test class to create and print sample students.
 2public class StudentTest {
 3    // Program entry point.
 4    public static void main(String[] args) {
 5        // Array with example students from different degree programs.
 6        Student[] studenten = {
 7                new Student("Müller",    "Anna",      10001, Studiengang.DSM),
 8                new Student("Schmidt",   "Ben",       10002, Studiengang.DEM),
 9                new Student("Weber",     "Clara",     10003, Studiengang.WIRTSCHAFTSINFORMATIK),
10                new Student("Fischer",   "David",     10004, Studiengang.SYSTEMS_ENGINEERING),
11                new Student("Wagner",    "Elena",     10005, Studiengang.BETRIEBSWIRTSCHAFT),
12                new Student("Becker",    "Fabian",    10006, Studiengang.DSM),
13                new Student("Hoffmann",  "Greta",     10007, Studiengang.DEM),
14                new Student("Koch",      "Hannah",    10008, Studiengang.WIRTSCHAFTSINFORMATIK),
15                new Student("Richter",   "Jonas",     10009, Studiengang.SYSTEMS_ENGINEERING),
16                new Student("Klein",     "Katharina", 10010, Studiengang.BETRIEBSWIRTSCHAFT)
17        };
18
19        // Print each student using Student.toString().
20        for (Student s : studenten) {
21            System.out.println(s);
22        }
23    }
24}

2. Waschmaschine

Erstellen Sie eine Klasse WashingMachine, mit der die grundlegenden Funktionen einer Waschmaschine simuliert werden. Verwenden Sie dazu drei Enums: State, Program und Temperature.

Anforderungen:

1. Zustand der Waschmaschine

Erstellen Sie ein enum State mit den Zuständen:
OFF, READY, RUNNING
Die Waschmaschine startet im Zustand OFF und soll in einem Attribut currentState ihren aktuellen Zustand speichern.

2. Waschprogramme

Erstellen Sie ein enum Program mit mindestens drei Programmen, zum Beispiel:
QUICK_WASH, NORMAL, DELICATE
Die Programme benötigen keine zusätzlichen Attribute.

3. Temperaturstufen

Erstellen Sie ein enum Temperature mit festen Temperaturwerten:
Zum Beispiel COLD (20°C), WARM (40°C), HOT (60°C)
Speichern Sie den Temperaturwert mithilfe eines Konstruktors im Enum.

4. Methoden in der Klasse WashingMachine

Implementieren Sie folgende Methoden:

  • powerOn()

    Schaltet die Waschmaschine von OFF in den Zustand READY Gibt eine passende Meldung in der Konsole aus.

  • selectProgram(Program program)

    Kann nur im Zustand READY aufgerufen werden Speichert das gewählte Programm und gibt es auf der Konsole aus

  • setTemperature(Temperature temperature)

    Kann nur im Zustand READY aufgerufen werden Speichert die gewählte Temperatur und gibt sie auf der Konsole aus

  • start()

    Kann nur aufgerufen werden, wenn sich die Maschine im Zustand READY befindet und sowohl ein Programm als auch eine Temperatur gewählt wurden. Gibt die gewählten Einstellungen aus, simuliert den Waschvorgang und setzt die Maschine anschließend wieder auf OFF.

Wichtig

🚩 Erstellen Sie ein Hauptprogramm, in dem: Die Waschmaschine eingeschaltet wird, ein Programm und eine Temperatur gewählt werden und der Waschvorgang gestartet wird.

Lösung anzeigen
State.java
1// Describes the current operating state of the washing machine.
2public enum State {
3    // Machine is switched off.
4    OFF,
5    // Machine is on and waiting for settings.
6    READY,
7    // Machine is currently washing.
8    RUNNING
9}
Program.java
1// Available wash programs.
2public enum Program {
3    // Short cycle for lightly dirty laundry.
4    QUICK_WASH,
5    // Standard everyday wash cycle.
6    NORMAL,
7    // Gentle cycle for sensitive fabrics.
8    DELICATE
9}
Temperature.java
 1// Available wash temperatures in degrees Celsius.
 2public enum Temperature {
 3    // Cold wash.
 4    COLD(20),
 5    // Warm wash.
 6    WARM(40),
 7    // Hot wash.
 8    HOT(60);
 9
10    // Numeric temperature value.
11    private final int degrees;
12
13    // Stores the degree value for each enum entry.
14    Temperature(int degrees) {
15        this.degrees = degrees;
16    }
17
18    // Returns the temperature in °C.
19    public int getDegrees() {
20        return degrees;
21    }
22}
WashingMachine.java
 1// Simulates a simple washing machine workflow.
 2public class WashingMachine {
 3    // Current machine state (OFF, READY, RUNNING).
 4    private State currentState;
 5    // Program chosen by the user.
 6    private Program selectedProgram;
 7    // Temperature chosen by the user.
 8    private Temperature selectedTemperature;
 9
10    // Creates a new machine that starts in OFF state.
11    public WashingMachine() {
12        this.currentState = State.OFF;
13    }
14
15    // Turns the machine on so settings can be selected.
16    public void powerOn() {
17        if (currentState == State.OFF) {
18            currentState = State.READY;
19            System.out.println("Waschmaschine wurde eingeschaltet. Zustand: " + currentState);
20        } else {
21            System.out.println("Waschmaschine ist bereits eingeschaltet.");
22        }
23    }
24
25    // Selects the wash program (only possible in READY state).
26    public void selectProgram(Program program) {
27        if (currentState != State.READY) {
28            System.out.println("Fehler: Programm kann nur im Zustand READY gewählt werden.");
29            return;
30        }
31        this.selectedProgram = program;
32        System.out.println("Programm gewählt: " + program);
33    }
34
35    // Selects the temperature (only possible in READY state).
36    public void setTemperature(Temperature temperature) {
37        if (currentState != State.READY) {
38            System.out.println("Fehler: Temperatur kann nur im Zustand READY eingestellt werden.");
39            return;
40        }
41        this.selectedTemperature = temperature;
42        System.out.println("Temperatur eingestellt: " + temperature + " (" + temperature.getDegrees() + "°C)");
43    }
44
45    // Starts the wash cycle if all required settings are present.
46    public void start() {
47        if (currentState != State.READY) {
48            System.out.println("Fehler: Waschmaschine ist nicht bereit.");
49            return;
50        }
51        if (selectedProgram == null || selectedTemperature == null) {
52            System.out.println("Fehler: Bitte zuerst Programm und Temperatur wählen.");
53            return;
54        }
55
56        currentState = State.RUNNING;
57        System.out.println("\n--- Waschvorgang gestartet ---");
58        System.out.println("Programm:    " + selectedProgram);
59        System.out.println("Temperatur:  " + selectedTemperature + " (" + selectedTemperature.getDegrees() + "°C)");
60        System.out.println("Zustand:     " + currentState);
61
62        // Waschvorgang simulieren
63        System.out.println("Wäsche wird gewaschen...");
64        System.out.println("--- Waschvorgang beendet ---\n");
65
66        // Zurücksetzen
67        currentState = State.OFF;
68        selectedProgram = null;
69        selectedTemperature = null;
70        System.out.println("Waschmaschine wurde ausgeschaltet. Zustand: " + currentState);
71    }
72}
WashingMachineTest.java
 1// Test class that demonstrates normal and invalid usage flows.
 2public class WashingMachineTest {
 3    // Program entry point.
 4    public static void main(String[] args) {
 5        // Create one washing machine instance for the demo.
 6        WashingMachine waschmaschine = new WashingMachine();
 7
 8        // Normaler Ablauf
 9        waschmaschine.powerOn();
10        waschmaschine.selectProgram(Program.NORMAL);
11        waschmaschine.setTemperature(Temperature.WARM);
12        waschmaschine.start();
13
14        System.out.println("========================================\n");
15
16        // Zweiter Durchlauf mit anderem Programm
17        waschmaschine.powerOn();
18        waschmaschine.selectProgram(Program.DELICATE);
19        waschmaschine.setTemperature(Temperature.COLD);
20        waschmaschine.start();
21
22        System.out.println("========================================\n");
23
24        // Fehlerfälle testen
25        System.out.println("--- Fehlerfälle ---");
26        waschmaschine.selectProgram(Program.QUICK_WASH);   // Fehler: noch OFF
27        waschmaschine.start();                              // Fehler: noch OFF
28
29        waschmaschine.powerOn();
30        waschmaschine.start();                              // Fehler: kein Programm/Temperatur
31    }
32}