121 lines
4.9 KiB
Plaintext
121 lines
4.9 KiB
Plaintext
ich: die methode berechneGebuehren soll so angepasst werden, somit die folgende Funktion dabei ist: Zwischen 20 und
|
|
6 Uhr kostet das Parken maximal 5 Euro. (Wenn ein Fahrzeug um 19:30 Uhr einfährt, tickt die Uhr 20:30, 21:30, 22:30,
|
|
23:30 und 0:30 Uhr nochmal hoch und dann wieder um 6:30 Uhr.). Das heißt aber nicht, dass ab 20 uhr man direkt 5 euro
|
|
bezahlenm muss, sondern nur wenn die Gebühren höher als 5 euro sind, in dieser Zeit muss man dann maximal 5 euro bezahlen.
|
|
hier meine methode dafür:
|
|
public double berechneGebuehren(String kennzeichen, Date ausfahrt) {
|
|
long parkdauer = berechneParkdauer(kennzeichen, ausfahrt);
|
|
double gebuehr = 0;
|
|
|
|
// Falls die Parkdauer 15 Minuten oder weniger beträgt, ist das Parken kostenlos
|
|
if (parkdauer <= 15) {
|
|
parkdauer = 0;
|
|
gebuehr = 0;
|
|
}
|
|
|
|
// Parkdauer nach den 15 Minuten
|
|
long parkdauerOhneFreiminuten = parkdauer - 15;
|
|
|
|
// Tageslimit: Maximal 15 Euro pro Tag
|
|
if (parkdauerOhneFreiminuten == 1440) {
|
|
gebuehr = 1500;
|
|
parkdauerOhneFreiminuten = 0;
|
|
}
|
|
|
|
// 1 Euro pro angefangene Stunde
|
|
if (parkdauerOhneFreiminuten > 0 && parkdauerOhneFreiminuten < 1440) {
|
|
while (parkdauerOhneFreiminuten > 0) {
|
|
gebuehr += 100;
|
|
parkdauerOhneFreiminuten -= 60;
|
|
}
|
|
}
|
|
|
|
// Prüfe, ob es sich um ein E-Auto handelt (Kennzeichen endet mit "E")
|
|
if (kennzeichen.endsWith("E")) {
|
|
gebuehr *= 0.8; // 20% Rabatt für E-Autos
|
|
}
|
|
return gebuehr;
|
|
}
|
|
|
|
KI: Um die Gebührenberechnung korrekt an die Regel "Zwischen 20 und 6 Uhr kostet das Parken maximal 5 Euro" anzupassen,
|
|
müssen wir zusätzlich die Parkzeiten in diesem Zeitfenster explizit überprüfen. Das bedeutet, dass in der Zeit von
|
|
20:00 Uhr bis 6:00 Uhr die Gebühren, wenn sie höher als 5 Euro wären, auf 5 Euro begrenzt werden.
|
|
|
|
Hier ist die angepasste Version deiner Methode, die diese Funktion berücksichtigt:
|
|
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.Calendar;
|
|
import java.util.Date;
|
|
|
|
public double berechneGebuehren(String kennzeichen, Date ausfahrt) {
|
|
long parkdauer = berechneParkdauer(kennzeichen, ausfahrt);
|
|
double gebuehr = 0;
|
|
|
|
// Falls die Parkdauer 15 Minuten oder weniger beträgt, ist das Parken kostenlos
|
|
if (parkdauer <= 15) {
|
|
return 0; // Kostenlos
|
|
}
|
|
|
|
// Parkdauer nach den 15 Minuten
|
|
long parkdauerOhneFreiminuten = parkdauer - 15;
|
|
|
|
// Tageslimit: Maximal 15 Euro pro Tag
|
|
if (parkdauerOhneFreiminuten >= 1440) { // 1440 Minuten = 24 Stunden
|
|
gebuehr = 1500;
|
|
return gebuehr; // Direkt zurück, da Tageslimit erreicht
|
|
}
|
|
|
|
// 1 Euro pro angefangene Stunde
|
|
if (parkdauerOhneFreiminuten > 0) {
|
|
while (parkdauerOhneFreiminuten > 0) {
|
|
gebuehr += 100; // 1 Euro pro Stunde
|
|
parkdauerOhneFreiminuten -= 60;
|
|
}
|
|
}
|
|
|
|
// Maximale Gebühren in der Nacht von 20 Uhr bis 6 Uhr
|
|
gebuehr = berechneNachttarif(kennzeichen, gebuehr, ausfahrt);
|
|
|
|
// Prüfe, ob es sich um ein E-Auto handelt (Kennzeichen endet mit "E")
|
|
if (kennzeichen.endsWith("E")) {
|
|
gebuehr *= 0.8; // 20% Rabatt für E-Autos
|
|
}
|
|
|
|
return gebuehr;
|
|
}
|
|
|
|
private double berechneNachttarif(String kennzeichen, double gebuehr, Date ausfahrt) {
|
|
Calendar cal = Calendar.getInstance();
|
|
cal.setTime(ausfahrt);
|
|
|
|
// Bestimme die Einfahrtszeit des Fahrzeugs
|
|
Date einfahrt = findeEinfahrtZeit(kennzeichen); // Methode zum Finden der Einfahrtszeit
|
|
Calendar einfahrtsCal = Calendar.getInstance();
|
|
einfahrtsCal.setTime(einfahrt);
|
|
|
|
// Prüfe, ob sich ein Teil der Parkdauer im Zeitraum von 20:00 bis 6:00 Uhr befindet
|
|
while (einfahrtsCal.before(cal)) {
|
|
int stunde = einfahrtsCal.get(Calendar.HOUR_OF_DAY);
|
|
if (stunde >= 20 || stunde < 6) {
|
|
// Die Gebühren für jede angefangene Stunde in diesem Zeitraum dürfen maximal 5 Euro sein
|
|
if (gebuehr > 500) {
|
|
gebuehr = 500; // Maximal 5 Euro während der Nachtzeit
|
|
}
|
|
}
|
|
|
|
// Erhöhe die Zeit um eine Stunde, um jede Stunde zu prüfen
|
|
einfahrtsCal.add(Calendar.HOUR_OF_DAY, 1);
|
|
}
|
|
|
|
return gebuehr;
|
|
}
|
|
|
|
private Date findeEinfahrtZeit(String kennzeichen) {
|
|
for (PKW pkw : parkendePkws) {
|
|
if (pkw.getKennzeichen().equals(kennzeichen)) {
|
|
return pkw.getEinfahrt();
|
|
}
|
|
}
|
|
return new Date(); // Falls kein PKW gefunden wurde, aktuelles Datum als Fallback
|
|
}
|