Verbesserungen an code Und die Methode berechneParkgebuehren
implementiert mit einem junit Testmain
parent
9cc877e0e9
commit
8be136b83a
|
@ -39,3 +39,69 @@ Frage 2:
|
|||
Math.ceil(2.1); // Ausgabe: 3.0
|
||||
Math.ceil(3.7); // Ausgabe: 4.0
|
||||
Math.ceil(1.01); // Ausgabe: 2.0
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------------
|
||||
Frage 3:
|
||||
Ich : die Methode getTime gibt die Zeit in stunden und Minuten??
|
||||
ChatGPT:
|
||||
Die Methode getTime() in Java gibt nicht direkt die Stunden und Minuten aus. Stattdessen gibt sie die Zeit als Anzahl der Millisekunden seit dem 1. Januar 1970, 00:00:00 UTC zurück (Unix-Zeit). Du kannst diese Millisekunden dann verwenden, um die Differenz zwischen zwei Date-Objekten zu berechnen, wie in deinem Fall geschehen.
|
||||
|
||||
Um explizit die Stunden und Minuten aus einem Date-Objekt zu bekommen, kannst du entweder die Calendar-Klasse oder die SimpleDateFormat-Klasse verwenden. Hier sind zwei Möglichkeiten:
|
||||
|
||||
1. Mit Calendar
|
||||
java
|
||||
Code kopieren
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.setTime(deinDateObjekt);
|
||||
int stunden = cal.get(Calendar.HOUR_OF_DAY); // Stunden im 24-Stunden-Format
|
||||
int minuten = cal.get(Calendar.MINUTE); // Minuten
|
||||
2. Mit SimpleDateFormat
|
||||
Falls du die Stunden und Minuten als String brauchst, kannst du SimpleDateFormat benutzen:
|
||||
|
||||
java
|
||||
Code kopieren
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
|
||||
String zeit = sdf.format(deinDateObjekt); // Zeit als String "HH:mm"
|
||||
Zusammengefasst:
|
||||
getTime() gibt die Millisekunden seit 1970 zurück, nicht direkt Stunden und Minuten.
|
||||
Um Stunden und Minuten zu extrahieren, musst du entweder Calendar verwenden oder die Ausgabe mit SimpleDateFormat formatieren.
|
||||
In deinem Fall, wenn du die Stunden und Minuten für Ein- und Ausfahrt benötigst, würde ich dir empfehlen, entweder Calendar zu verwenden oder mit SimpleDateFormat die Zeit zu formatieren, um Klarheit zu schaffen.
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Frage 4:
|
||||
Ich: var sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
|
||||
Date d1 = sdf.parse("01.10.2024, 14:00");
|
||||
Date d2 = sdf.parse("01.10.2024, 15:30");
|
||||
|
||||
System.out.println( d1.getHours());
|
||||
warum wurde die Methode .getHours() durchgestrichen ??
|
||||
|
||||
cahtGPT: Die Methode getHours() der Klasse Date ist durchgestrichen, weil sie als veraltet (deprecated) gilt. Java hat entschieden, diese Methode zu entwerten, weil die Date-Klasse in ihrer ursprünglichen Form als unflexibel und fehleranfällig angesehen wurde. Stattdessen empfiehlt Java, modernere Klassen wie Calendar oder die Klassen aus dem java.time-Paket (z. B. LocalDateTime, ZonedDateTime) zu verwenden.
|
||||
|
||||
Die veralteten Methoden wie getHours(), getMinutes(), und getSeconds() wurden durch leistungsfähigere und flexiblere APIs ersetzt, die besser mit Zeitzonen und Internationalisierung umgehen können.
|
||||
|
||||
Alternative Lösung:
|
||||
Anstatt getHours() zu verwenden, solltest du Calendar oder die neuen Zeit-API-Klassen verwenden. Hier ist eine Möglichkeit, die Stunde mithilfe von Calendar zu bekommen:
|
||||
|
||||
Mit Calendar:
|
||||
java
|
||||
Code kopieren
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
|
||||
Date d1 = sdf.parse("01.10.2024, 14:00");
|
||||
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.setTime(d1);
|
||||
int hours = cal.get(Calendar.HOUR_OF_DAY); // Stunden im 24-Stunden-Format
|
||||
|
||||
System.out.println(hours); // Ausgabe: 14
|
||||
Mit java.time.LocalDateTime (empfohlene Methode ab Java 8):
|
||||
Java 8 und höher bietet das java.time-Paket, das viel leistungsfähiger ist und besser mit Datum und Zeit umgeht.
|
||||
|
||||
java
|
||||
Code kopieren
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy, HH:mm");
|
||||
LocalDateTime dateTime = LocalDateTime.parse("01.10.2024, 14:00", formatter);
|
||||
|
||||
int hours = dateTime.getHour();
|
||||
System.out.println(hours); // Ausgabe: 14
|
||||
Fazit:
|
||||
Vermeide die Verwendung der veralteten getHours()-Methode und nutze entweder Calendar oder, noch besser, die java.time-API, die in Java 8
|
|
@ -14,7 +14,7 @@ import java.util.Date;
|
|||
public class Fahrzeug {
|
||||
|
||||
private final String kennzeichen;
|
||||
private final Date einfahrt;
|
||||
private Date einfahrt;
|
||||
private Date ausfahrt;
|
||||
private boolean bezahlt;
|
||||
private int betrag;
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
package Parkhaus;
|
||||
|
||||
public class Gebuehrenberechnen {
|
||||
|
||||
// Hier werde ich die Parkgebühren behandlen
|
||||
|
||||
}
|
|
@ -15,7 +15,7 @@ class JTest_Einfahren {
|
|||
@Test
|
||||
public void testEinfahrenOhneEingabe() throws ParseException {
|
||||
|
||||
parkhaus.einfahrenextern("", "");
|
||||
parkhaus.einfahren("", "");
|
||||
assertEquals(179, parkhaus.getMaxPlaetze());
|
||||
}
|
||||
|
||||
|
@ -23,8 +23,7 @@ class JTest_Einfahren {
|
|||
public void testEinfahrenMitEingabe() throws ParseException {
|
||||
String kennzeichen = "MA-SH 4077";
|
||||
String einfahrtzeit = "01.10.2024, 14:30";
|
||||
|
||||
String test = parkhaus.einfahrenextern(kennzeichen, einfahrtzeit);
|
||||
String test = parkhaus.einfahren(kennzeichen, einfahrtzeit);
|
||||
assertTrue(test.contains(kennzeichen));
|
||||
assertTrue(test.contains(einfahrtzeit));
|
||||
assertEquals(179, parkhaus.getMaxPlaetze());
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
package Parkhaus;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class JTest_berechneParkgebuehren {
|
||||
|
||||
private Parkhaus parkhaus;
|
||||
private SimpleDateFormat sdf;
|
||||
@BeforeEach
|
||||
void start() throws ParseException {
|
||||
parkhaus = new Parkhaus();
|
||||
sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_berechneParkgebuehren() throws ParseException, AutoNichtGefundenException {
|
||||
String kennzeichen = "MA-SH 4077";
|
||||
String einfahrt = "01.10.2024, 14:30";
|
||||
String ausfahrt = "01.10.2024, 14:45";
|
||||
parkhaus.einfahren(kennzeichen, einfahrt);
|
||||
|
||||
// 15 Minuten => True
|
||||
assertEquals(0,parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt));
|
||||
|
||||
// 16 Minuten => True
|
||||
einfahrt = "01.10.2024, 14:30";
|
||||
ausfahrt = "01.10.2024, 14:46";
|
||||
assertEquals(1,parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt));
|
||||
|
||||
// 1 Stunde => True
|
||||
einfahrt = "01.10.2024, 14:30";
|
||||
ausfahrt = "01.10.2024, 15:30";
|
||||
assertEquals(1, parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt));
|
||||
|
||||
|
||||
|
||||
// 2 Stunden => True
|
||||
einfahrt = "01.10.2024, 14:00";
|
||||
ausfahrt = "01.10.2024, 16:00";
|
||||
assertEquals(2, parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt));
|
||||
|
||||
// Zwischen 20 bis 6 Uhr => True
|
||||
einfahrt = "01.10.2024, 22:00";
|
||||
ausfahrt = "02.10.2024, 04:00";
|
||||
assertEquals(5, parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt));
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -1,11 +1,18 @@
|
|||
package Parkhaus;
|
||||
|
||||
import java.text.ParseException;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
public class Main {
|
||||
|
||||
public static void main(String[] args) throws ParseException {
|
||||
new TextUI();
|
||||
public static void main(String[] args) throws ParseException, AutoNichtGefundenException {
|
||||
|
||||
var sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
|
||||
Date d1 = sdf.parse("01.10.2024, 14:00");
|
||||
Date d2 = sdf.parse("01.10.2024, 15:30");
|
||||
|
||||
|
||||
System.out.println( d1.getHours());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package Parkhaus;
|
|||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
||||
/* Parkhaus klasse
|
||||
|
@ -23,7 +24,7 @@ public class Parkhaus {
|
|||
sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
|
||||
}
|
||||
|
||||
private String einfahrenIntern(String kennzeichen, String einfahrtzeit) throws ParseException {
|
||||
public String einfahren(String kennzeichen, String einfahrtzeit) throws ParseException {
|
||||
Date einfahrt;
|
||||
Fahrzeug fahrzeug;
|
||||
if (kennzeichen.isEmpty() && einfahrtzeit.isEmpty())
|
||||
|
@ -42,55 +43,77 @@ public class Parkhaus {
|
|||
+ fahrzeug.getEinfahrtFormatted() + " im Parkhaus eingefahren.";
|
||||
}
|
||||
|
||||
public String einfahrenextern(String kennzeichen, String einfahrtzeit) throws ParseException {
|
||||
|
||||
return einfahrenIntern(kennzeichen, einfahrtzeit);
|
||||
}
|
||||
|
||||
private int berechneParkgebuehrenIntern(String kennzeichen, String ausfahrtzeit)throws AutoNichtGefundenException, ParseException {
|
||||
Fahrzeug fahrzeug = findeFahrzeug(kennzeichen);
|
||||
Date ausfahrt = sdf.parse(ausfahrtzeit);
|
||||
Date einfahrt = fahrzeug.getEinfahrt();
|
||||
|
||||
long inMinuten = ((ausfahrt.getTime() - einfahrt.getTime()) / 1000 / 60);
|
||||
int inStunden = (int) Math.ceil(inMinuten / 60); // Z.b = 6 Stunden
|
||||
int maxNachtBetrag = 5;
|
||||
int maxTagBetrag = 15;
|
||||
int betrag;
|
||||
|
||||
if (inMinuten <= 15)
|
||||
betrag = 0;
|
||||
|
||||
|
||||
// zwische 20 Uhr und 6 Uhr max 5€
|
||||
else if (einfahrt.getHours() >= 20 || einfahrt.getHours() < 6 || ausfahrt.getHours() >= 20|| ausfahrt.getHours() < 6)
|
||||
betrag = Math.min(inStunden, maxNachtBetrag);
|
||||
public int berechneParkgebuehren(String kennzeichen, String ausfahrtzeit) throws AutoNichtGefundenException, ParseException {
|
||||
if (kennzeichen.isEmpty()) {
|
||||
throw new AutoNichtGefundenException("Sie müssen bitte das Kennzeichen Ihres Autos eingeben.");
|
||||
}
|
||||
|
||||
else {
|
||||
betrag = inStunden;
|
||||
Fahrzeug fahrzeug = findeFahrzeug(kennzeichen);
|
||||
Date einfahrt = fahrzeug.getEinfahrt();
|
||||
Date ausfahrt;
|
||||
|
||||
if (betrag > maxTagBetrag)
|
||||
betrag = maxTagBetrag;
|
||||
}
|
||||
if (ausfahrtzeit.isEmpty()) {
|
||||
String aktuelleZeitString = sdf.format(new Date());
|
||||
ausfahrt = sdf.parse(aktuelleZeitString);
|
||||
} else {
|
||||
ausfahrt = sdf.parse(ausfahrtzeit);
|
||||
}
|
||||
|
||||
fahrzeug.setBetrag(betrag);
|
||||
return fahrzeug.getBetrag();
|
||||
double inMinuten = (ausfahrt.getTime() - einfahrt.getTime()) / 1000.0 / 60.0;
|
||||
int inStunden = (int) Math.ceil(inMinuten / 60.0);
|
||||
int maxNachtBetrag = 5;
|
||||
int maxTagBetrag = 15;
|
||||
int betrag = 0;
|
||||
|
||||
}
|
||||
// Erstellung von Calendar-Objekten für Einfahrt und Ausfahrt
|
||||
Calendar calEinfahrt = Calendar.getInstance();
|
||||
calEinfahrt.setTime(einfahrt);
|
||||
|
||||
public int berechneParkgebuehrenExtern(String kennzeichen, String ausfahrtzeit) throws AutoNichtGefundenException, ParseException {
|
||||
int betrag = berechneParkgebuehrenIntern(kennzeichen, ausfahrtzeit);
|
||||
return betrag;
|
||||
Calendar calAusfahrt = Calendar.getInstance();
|
||||
calAusfahrt.setTime(ausfahrt);
|
||||
|
||||
int einfahrtStunde = calEinfahrt.get(Calendar.HOUR_OF_DAY);
|
||||
int ausfahrtStunde = calAusfahrt.get(Calendar.HOUR_OF_DAY);
|
||||
|
||||
if (inMinuten <= 15)
|
||||
betrag = 0;
|
||||
|
||||
else if ((einfahrtStunde < 6 || einfahrtStunde >= 20) || (ausfahrtStunde < 6 || ausfahrtStunde >= 20)) {
|
||||
betrag = (inStunden <= maxNachtBetrag) ? inStunden : maxNachtBetrag;
|
||||
System.out.println(betrag);
|
||||
}
|
||||
|
||||
|
||||
else {
|
||||
betrag = inStunden;
|
||||
if (betrag > maxTagBetrag) {
|
||||
betrag = maxTagBetrag;
|
||||
}
|
||||
}
|
||||
|
||||
fahrzeug.setBetrag(betrag);
|
||||
return fahrzeug.getBetrag();
|
||||
}
|
||||
|
||||
|
||||
private Fahrzeug findeFahrzeug(String kennzeichen) throws AutoNichtGefundenException {
|
||||
|
||||
for (Fahrzeug auto : fahrzeuge)
|
||||
if (auto.getKennzeichen().equals(kennzeichen))
|
||||
return auto;
|
||||
|
||||
throw new AutoNichtGefundenException("Ihr Auto wurde nicht gefunden. Bitte wenden Sie sich an den Support");
|
||||
|
||||
}
|
||||
|
||||
|
||||
public boolean checkParkplatze() {
|
||||
return maxPlaetze > 0;
|
||||
}
|
||||
|
||||
private boolean checkSchulden(String kennzeichen) {
|
||||
public boolean checkSchulden(String kennzeichen) {
|
||||
for (Fahrzeug sc : fahrzeugeMitSchulden)
|
||||
if (sc.getKennzeichen().equals(kennzeichen))
|
||||
return true;
|
||||
|
@ -98,20 +121,6 @@ public class Parkhaus {
|
|||
return false;
|
||||
}
|
||||
|
||||
public boolean checkSchuldenExtern(String kennzeichen) {
|
||||
return checkSchulden(kennzeichen);
|
||||
}
|
||||
|
||||
public Fahrzeug findeFahrzeug(String kennzeichen) throws AutoNichtGefundenException {
|
||||
|
||||
for (Fahrzeug auto : fahrzeuge)
|
||||
if (auto.getKennzeichen().equals(kennzeichen))
|
||||
return auto;
|
||||
|
||||
throw new AutoNichtGefundenException("Ihre Auto wurde nicht gefunden \n melden Sie sich bitte an die Support");
|
||||
|
||||
}
|
||||
|
||||
// Getter methoden:
|
||||
public ArrayList<Fahrzeug> getFahrzeuge() {
|
||||
return fahrzeuge;
|
||||
|
|
|
@ -5,16 +5,14 @@ import java.util.Scanner;
|
|||
|
||||
public class TextUI {
|
||||
private Parkhaus system;
|
||||
private Scanner eingabe;
|
||||
|
||||
|
||||
TextUI() throws ParseException{
|
||||
TextUI() throws ParseException, AutoNichtGefundenException{
|
||||
system = new Parkhaus();
|
||||
startprogramm();
|
||||
}
|
||||
|
||||
private void startprogramm() throws ParseException {
|
||||
eingabe = new Scanner(System.in);
|
||||
private void startprogramm() throws ParseException, AutoNichtGefundenException {
|
||||
Scanner eingabe = new Scanner(System.in);
|
||||
boolean aktiv = true;
|
||||
|
||||
System.out.println("<<Willkommen im parkhaus 'kiss and ride'>> ");
|
||||
|
@ -22,15 +20,16 @@ public class TextUI {
|
|||
System.out.println();
|
||||
System.out.println("Bitte Wählen Sie ein Option ein: ");
|
||||
System.out.println("1.Einfahren");
|
||||
System.out.println("2.Ausfahren");
|
||||
System.out.println("3. Parkgebühren berechnen und (bezahlen Oder Schulden lassen)");
|
||||
System.out.println("4. Beenden");
|
||||
System.out.println("2. Parkgebühren berechnen lassen");
|
||||
System.out.println("3. Parkgebühren bezahlen");
|
||||
System.out.println("4.Ausfahren");
|
||||
System.out.println("5. Beenden");
|
||||
|
||||
System.out.print("> ");
|
||||
String auswhal = eingabe.nextLine();
|
||||
String kennzeichen;
|
||||
String einfahrtzeit;
|
||||
|
||||
String ausfahrtzeit;
|
||||
switch (auswhal) {
|
||||
case "1": // Einfahren
|
||||
if (!system.checkParkplatze())
|
||||
|
@ -38,22 +37,30 @@ public class TextUI {
|
|||
else {
|
||||
System.out.println("geben Sie bitte das Kennzeichen Ihres Autos ein (optional): ");
|
||||
kennzeichen = eingabe.nextLine();
|
||||
if (system.checkSchuldenExtern(kennzeichen))
|
||||
if (system.checkSchulden(kennzeichen))
|
||||
System.out.println("Das Auto mit dem Kennzeichen: " + kennzeichen + " ist im Parkhaus mit Schulden eingefahren!" );
|
||||
System.out.println("geben Sie nun bitte die Einfahrtszeit ein (Optional):");
|
||||
System.out.println("geben Sie nun bitte die Einfahrtszeit ein (oder lassen Sie das für das System):");
|
||||
einfahrtzeit = eingabe.nextLine();
|
||||
System.out.println(system.einfahrenextern(kennzeichen, einfahrtzeit));
|
||||
System.out.println(system.einfahren(kennzeichen, einfahrtzeit));
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case "2":
|
||||
// TODO
|
||||
|
||||
System.out.println("Geben Sie erneut das Kennzeichnes Ihres Autos an");
|
||||
kennzeichen = eingabe.nextLine();
|
||||
System.out.println("Geben Sie bitte die Ausfahrtzeit ein (oder lassen Sie das für das System)");
|
||||
ausfahrtzeit = eingabe.nextLine();
|
||||
system.berechneParkgebuehren(kennzeichen, ausfahrtzeit);
|
||||
break;
|
||||
case "3":
|
||||
// TODO
|
||||
break;
|
||||
case "4":
|
||||
// TODO
|
||||
break;
|
||||
|
||||
case "5":
|
||||
break;
|
||||
|
||||
default:
|
||||
System.out.println("Das war leider keine gültige Eingabe");
|
||||
|
|
|
@ -1,16 +1,20 @@
|
|||
package Parkhaus;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
|
||||
/*kennzeichenzufaelliggenerieren:
|
||||
*
|
||||
* - Diese Klasse hat nur die Aufgabe, zufällige Kennzeichen zu generieren
|
||||
* - immer wenn diese Klasse ein zufälliges Kennzeichen generiert,
|
||||
* - speichere ich das,damit es nicht für mehrere Autos dasselbe Kennzeichen generiert.
|
||||
* - Hashset verwenden, damit das System nicht für mehrere Autos dasselbe Kennzeichen generiert
|
||||
|
||||
*/
|
||||
public class kennzeichenzufaelliggenerieren {
|
||||
private static final ArrayList<String> speichereEindutigeNummern = new ArrayList<>();
|
||||
// Keine Duplikate
|
||||
private static Set<String> speichereEindutigeNummern = new HashSet<>();
|
||||
private static final String[] ersteZweiZeichen = { "MA", "HD", "KA", "FF", "ROK", "BW", "HH", "B", "D" };
|
||||
private static final String[] zweiteZweizeichen = { "ME", "SH", "DF", "KC", "FT", "GH", "OM", "KL", "CV" };
|
||||
private static String eindutigeZahlen = "";
|
||||
|
@ -22,18 +26,14 @@ public class kennzeichenzufaelliggenerieren {
|
|||
zufaelligeKennzeichen = ersteZweiZeichen[random.nextInt(ersteZweiZeichen.length)];
|
||||
zufaelligeKennzeichen += "-" + zweiteZweizeichen[random.nextInt(zweiteZweizeichen.length)] + " ";
|
||||
|
||||
while (true) {
|
||||
do {
|
||||
eindutigeZahlen = "";
|
||||
for (int i = 1; i <= 4; i++)
|
||||
eindutigeZahlen += random.nextInt(10);
|
||||
|
||||
if (!checkEindutigeZeichen())
|
||||
continue;
|
||||
|
||||
speichereEindutigeNummern.add(eindutigeZahlen);
|
||||
break;
|
||||
}
|
||||
} while (speichereEindutigeNummern.contains(eindutigeZahlen));
|
||||
|
||||
speichereEindutigeNummern.add(eindutigeZahlen);
|
||||
zufaelligeKennzeichen += eindutigeZahlen;
|
||||
|
||||
if (random.nextBoolean())
|
||||
|
@ -43,12 +43,4 @@ public class kennzeichenzufaelliggenerieren {
|
|||
|
||||
}
|
||||
|
||||
public static boolean checkEindutigeZeichen() {
|
||||
for (String s : speichereEindutigeNummern)
|
||||
if (s.equals(eindutigeZahlen))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue