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
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}
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}
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,RUNNINGDie Waschmaschine startet im ZustandOFFund soll in einem AttributcurrentStateihren aktuellen Zustand speichern.
2. Waschprogramme¶
Erstellen Sie ein enum Program mit mindestens drei Programmen, zum Beispiel:QUICK_WASH,NORMAL,DELICATEDie Programme benötigen keine zusätzlichen Attribute.
3. Temperaturstufen¶
Erstellen Sie ein enum Temperature mit festen Temperaturwerten:Zum BeispielCOLD (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
OFFin den ZustandREADYGibt eine passende Meldung in der Konsole aus.
selectProgram(Program program)Kann nur im Zustand
READYaufgerufen werden Speichert das gewählte Programm und gibt es auf der Konsole aus
setTemperature(Temperature temperature)Kann nur im Zustand
READYaufgerufen werden Speichert die gewählte Temperatur und gibt sie auf der Konsole aus
start()Kann nur aufgerufen werden, wenn sich die Maschine im Zustand
READYbefindet 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 aufOFF.
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
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}
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}
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}
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}
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}