Version: 29. April 2025
Dozent: Mario Pfob
Konkrete Aufgabenstellungen in Moodle
JEP 441
└── root
└── de
└── dhbw
└── ravensburg
└── icu4j
└── Patient.java
package de.dhbw.ravensburg.icu4j;
class Patient {
private String name;
private int age;
Patient(String name, int age) {
this.name = name;
this.age = age;
}
String getName() {
return name;
}
int getAge() {
return age;
}
}
import java.util.Scanner;
class ScannerExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter your name: ");
String name = scanner.nextLine();
System.out.println("Hello, " + name + "!");
scanner.close();
}
}
class ScannerExampleQualified {
public static void main(String[] args) {
java.util.Scanner scanner = new java.util.Scanner(System.in);
System.out.print("Enter your name: ");
String name = scanner.nextLine();
System.out.println("Hello, " + name + "!");
scanner.close();
}
}
import java.math.*;
public class MathWildcard {
public static void main(String[] args) {
BigInteger a = new BigInteger("1");
BigDecimal b = new BigDecimal("2");
System.out.println("Number: " + a);
System.out.println("Number: " + b);
}
}
import static java.lang.Math.PI;
public class MathStatic {
public static void main(String[] args) {
System.out.println("PI: " + PI);
}
}
module org.mariopfob {}
module org.mariopfob {
exports programming;
}
module de.svgruppe {
requires org.mariopfob;
}
package newsapp;
import programming.Feed;
public class NewsApp {
public static void main(String[] args) {
Feed feed = new Feed("Example Feed", "https://example.com/feed");
System.out.println("Feed Name: " + feed.feedName());
}
}
package de.dhbw.ravensburg.icu4j;
class HospitalUtils {
double calculateBodySurfaceArea(double height, double weight) {
// Option 1: BSA in m² is used for drug dosing
return Math.sqrt((height * weight) / 3600); // Option 2: BSA in m² is used for drug dosing
}
}
package de.dhbw.ravensburg.icu4j;
class MedicamentValidator {
boolean validateMedicamentName(String medicamentName) {
/*
* Examples of valid names:
* - "Aspirin"
* - "Paracetamol"
* - "Ibuprofen"
* Examples of invalid names:
* - "A" (too short)
* - "Paracetamol123" (contains numbers)
* - "Ibuprofen!" (contains special characters)
* - " " (empty string)
*/
if (medicamentName == null || medicamentName.trim().isEmpty()) {
return false; // Invalid name
}
if (medicamentName.length() < 3 || medicamentName.length() > 50) {
return false; // Invalid length
}
if (!medicamentName.matches("[a-zA-Z\\s]+")) { // Regex: siehe Kapitel 8
return false; // Invalid characters
}
return true;
}
}
package de.dhbw.ravensburg.icu4j;
class IcuMonitor {
/**
* Counts the number of patients in the ICU who are children (under 18 years old).
*
* @author Dr. Shaun Murphy
* @since 0.0.1
* @param patients Array of {@link Patient} to be monitored.
* @return The number of children in the ICU.
*/
int countChildrenPatientsInICU(Patient[] patients) {
int childCount = 0;
for (Patient patient : patients) {
if (patient.getAge() < 18) {
childCount++;
}
}
return childCount;
}
}
package de.dhbw.ravensburg.icu4j;
class Patient {
private String name;
private int age;
Patient(String name, int age) {
this.name = name;
this.age = age;
}
String getName() {
return name;
}
int getAge() {
return age;
}
}
package de.dhbw.ravensburg.icu4j;
class CancerPatient extends Patient {
private String cancerType;
private String treatment;
CancerPatient(String name, int age, String cancerType, String treatment) {
super(name, age);
this.cancerType = cancerType;
this.treatment = treatment;
}
String getCancerType() {
return cancerType;
}
void setCancerType(String cancerType) {
this.cancerType = cancerType;
}
String getTreatment() {
return treatment;
}
void setTreatment(String treatment) {
this.treatment = treatment;
}
}
package de.dhbw.ravensburg.icu4j;
interface Operating {
boolean isPatientStillAlive(int heartRate);
}
package de.dhbw.ravensburg.icu4j;
class InvasiveOperation implements Operating {
@Override
public boolean isPatientStillAlive(int heartRate) {
return heartRate > 0;
}
}
module de.app {
requires javafx.controls;
requires javafx.fxml;
opens medicine to javafx.fxml;
exports medicine;
}
package medicine;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class JavaFXExample extends Application {
@Override
public void start(Stage stage) {
String javaVersion = System.getProperty("java.version");
String javafxVersion = System.getProperty("javafx.version");
Label l = new Label("A medicine app running with JavaFX " + javafxVersion + " and JDK " + javaVersion + ".");
Scene scene = new Scene(new StackPane(l), 540, 150);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
Application.launch();
}
}
package medicine;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.IOException;
public class MedicineApp extends Application {
@Override
public void start(Stage stage) throws IOException {
FXMLLoader loader = new FXMLLoader(getClass().getResource("MedicineGUI.fxml"));
Parent root = loader.load();
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
Application.launch();
}
}
package medicine;
import javafx.fxml.FXML;
import javafx.scene.control.TextField;
public class MedicineController {
@FXML
private TextField txtName; // same name as in the FXML file!
@FXML
private TextField txtAge; // same name as in the FXML file!
public void initialize() {
// Initialization logic if needed
}
public void registerPatient() {
String patientName = txtName.getText();
String patientAge = txtAge.getText();
System.out.println("Patient Name: " + patientName);
System.out.println("Patient Age: " + patientAge);
}
}
Erstelle eine Version-Klasse, die Softwareversionen wie "2.4.1" repräsentiert.
Implementiere Comparable, um Versionen semantisch korrekt zu vergleichen (2.10.0 ist größer als 2.9.0).
Beachte Fälle wie "1.0.0", "1.0" und "1".
Generell kann davon ausgegangen werden, dass Versionen immer aus drei Stellen bestehen und nur Zahlen enthalten.
Vector-Klasse nicht relevant
+ Constraint Propagation
+ Constraint Propagation
| Algorithmus | Zeitkomplexität (Best/Avg/Worst) | Speicher | Stabil | Bemerkungen |
|---|---|---|---|---|
| Bubble Sort | O(n)/O(n²)/O(n²) | O(1) | Ja | Einfach, ineffizient für große Arrays |
| Selection Sort | O(n²)/O(n²)/O(n²) | O(1) | Nein | Einfach, ineffizient für große Arrays |
| Insertion Sort | O(n)/O(n²)/O(n²) | O(1) | Ja | Effizient für kleine Arrays |
| Quicksort | O(n log n)/O(n log n)/O(n²) | O(log n) | Nein | Schnell in der Praxis |
| Mergesort | O(n log n)/O(n log n)/O(n log n) | O(n) | Ja | Garantierte Performance |
| Algorithmus | Zeitkomplexität | Speicherkomplexität | Anforderungen | Besonderheiten |
|---|---|---|---|---|
| Lineare Suche | O(n) | O(1) | Keine | Einfachste Implementierung |
| Binäre Suche | O(log n) | O(1) | Sortiert | Effizient für große Datenmengen |
| Interpolation | O(log log n) | O(1) | Sortiert, gleichmäßig verteilt | Schnell bei gleichmäßiger Verteilung |
| Exponential | O(log n) | O(1) | Sortiert | Gut für unbegrenzte Arrays |
| Fibonacci | O(log n) | O(1) | Sortiert | Verwendet nur Addition/Subtraktion |
| Hash-basiert | O(1) | O(n) | Keine | Schnellster Zugriff, benötigt Vorverarbeitung |
Implementiere eine PasswordValidator-Klasse, die Passwörter anhand verschiedener Kriterien (Mindestlänge, Sonderzeichen, Zahlen, Groß-/Kleinbuchstaben) überprüft.
Erstelle für jeden Validierungsfall eine spezifische Exception (z.B. TooShortPasswordException, NoSpecialCharacterException) und sammle alle auftretenden Fehler, um sie gebündelt zurückzugeben, anstatt bei dem ersten Fehler abzubrechen.
Erstellen eine Hauptklasse "DrugCompatibility" mit einer main-Methode.
Implementiere die folgenden funktionalen Komponenten:
Implementiere ein System zur Analyse von Banküberweisungen mit Stream-Operationen. Erstelle dazu eine Klasse Überweisung mit Attributen für Sender, Empfänger, Betrag und Datum. Entwickle anschließend Stream-Pipelines, die folgende Anforderungen erfüllen:
Collectors.groupingBy() und Collectors.mapping()flatMap() für einen gegebenen Kunden alle direkten und indirekten Zahlungsverbindungen (Überweisungen über maximal einen Zwischenkunden) ermittelt
Entwickel eine ProductCatalogBuilder-Klasse, die einen dynamischen Produktkatalog für einen Online-Shop erstellt. Die Klasse soll:
addProduct(Product product) anbieten, die ein Produkt zum Katalog hinzufügtgenerateCatalogByCategorySection() implementieren, die Produkte nach Kategorien gruppiertapplyPriceFilter(double minPrice, double maxPrice) bereitstellen, die den Katalog nach Preisbereich filtert
Implementiere einen Passwort-Validator für ein Login-System, der mit regulären Ausdrücken prüft, ob ein Passwort die Sicherheitsanforderungen erfüllt (mindestens 8 Zeichen, Groß- und Kleinbuchstaben, Zahlen und Sonderzeichen).