Compare commits

..

7 Commits

Author SHA1 Message Date
Leon Maximilian Löhle d4ead6ec4b Merge remote-tracking branch 'origin/main' 2024-10-07 14:44:25 +02:00
Leon Maximilian Löhle 247182cb34 Hinzufügen der Ordner für FlowChart und KI Prompts
Nach Prüfung korrektur des Datums, nun keine nicht existierenden Daten mehr möglich
Anpassung des Platz überprüfens nun kann nicht mehr eingefahren werden wenn das Parkhaus voll ist
2024-10-07 14:43:33 +02:00
Leon Maximilian Löhle b9e703500f Hinzufügen der Ordner für FlowChart und KI Prompts
Nach Prüfung korrektur des Datums, nun keine nicht existierenden Daten mehr möglich
Anpassung des Platz überprüfens nun kann nicht mehr eingefahren werden wenn das Parkhaus voll ist
2024-10-07 14:40:36 +02:00
Leon Maximilian Löhle 76141da3f1 Korrektur des Codes. Berechnung nach mehreren Tests nun möglich. Muss noch auf korrektheit geprüft werden 2024-10-03 13:46:58 +02:00
Leon Maximilian Löhle a0da70b766 versuch den KI Ordner einzufügen 2024-10-03 13:18:03 +02:00
Leon Maximilian Löhle 428a16efde Verbesserungen, Code anpassung sowie erstes Gerüst zur implementierung der Schulden, des ausfahrens ohne zu zahlen und der bezahl option 2024-10-03 11:15:40 +02:00
Leon Maximilian Löhle 4c19b4c848 Verbesserungen, Code anpassung, erste Testläufe, überarbeitung der Funktionen 2024-10-02 10:51:31 +02:00
15 changed files with 539 additions and 55 deletions

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

6
.idea/misc.xml 100644
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

11
.idea/modules.xml 100644
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/OnlineShop/OnlineShop.iml" filepath="$PROJECT_DIR$/OnlineShop/OnlineShop.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/PR2-WS24-25-3010261.iml" filepath="$PROJECT_DIR$/.idea/PR2-WS24-25-3010261.iml" />
<module fileurl="file://$PROJECT_DIR$/Qualifier Parkhaus/Qualifier.iml" filepath="$PROJECT_DIR$/Qualifier Parkhaus/Qualifier.iml" />
<module fileurl="file://$PROJECT_DIR$/Vorbereitung/Vorbereitung.iml" filepath="$PROJECT_DIR$/Vorbereitung/Vorbereitung.iml" />
</modules>
</component>
</project>

View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>

6
.idea/vcs.xml 100644
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

View File

@ -0,0 +1,26 @@
Benutzer startet Main Klasse
System gibt Willkommens Nachricht aus und bittet um eingabe ob einfahrt oder ausfahrt
Benutzer gibt ein ob man ein-, ausfährt, bezahlen oder beenden möchte
System nimmt entscheidung auf und startet anhand der Entscheidung entweder der Park/Ausfahrt oder den Bezahlvorgang oder beendet das Programm
1. Parkvorgang:
Das Programm bittet um eingabe des Kennzeichens und des Datums mit Uhrzeit
Benutzer gibt die geforderten Daten ein
Programm kreiert anhand der Daten ein neues Auto Objekt in der Parkhaus Klasse und speichert in einer Auto Liste um mehrere Autos managen zu können
2. Ausfahrt:
Eingabe des Kennzeichens und Datums mit Uhrzeit vom Ausfahren
Preis berechnung im Hintergrund
Platz im Parkhaus wird wieder größer
nicht gezahlter Betrag wird zu den Schulden gespeichert
3. Bezahlen und Ausfahren
Eingabe des Kennzeichens und Datums mit Uhrzeit vom Ausfahren
Preis berechnung im Hintergrund
Ausgabe des Preises
Kunde wird aufgefordert seine Kreditkartennummer einzugeben
Prüfziffer wird berechnet
Platz im Parkhaus wird größer, keine Schulden da gezahlt wird
4. beenden:
Programm verabschiedet sich und wird beendet

View File

@ -0,0 +1,21 @@
Ich: Ich benutze das Java simple Date format und wenn ich den 31.02.2023 eingebe, wird kein fehler geworfen
ChatGPT:
Das Verhalten des `SimpleDateFormat` in Java hängt von seiner Toleranz gegenüber ungültigen Datumsangaben ab. Standardmäßig versucht es, das eingegebene Datum auf ein gültiges Datum anzupassen, anstatt einen Fehler zu werfen.
Wenn du z.B. den 31.02.2023 eingibst, passt Java dieses Datum auf den nächsten gültigen Tag an, in diesem Fall den 3. März 2023, da der Februar im Jahr 2023 nur 28 Tage hat.
Um sicherzustellen, dass wirklich nur gültige Datumsangaben akzeptiert werden und eine Ausnahme (wie `ParseException`) bei ungültigen Daten geworfen wird, musst du den Leniency-Modus deaktivieren. Hier ist ein Beispiel:
```java
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
sdf.setLenient(false); // Leniency-Modus deaktivieren
try {
Date date = sdf.parse("31.02.2023");
System.out.println("Gültiges Datum: " + date);
} catch (ParseException e) {
System.out.println("Ungültiges Datum: " + e.getMessage());
}
```
Mit `sdf.setLenient(false)` wird der Parser streng und ungültige Daten wie der 31. Februar führen zu einem Fehler.

View File

@ -4,23 +4,42 @@ public class Auto {
private String kennzeichen;
private Date einfahrtZeit;
private Date bezahlZeit;
private Date ausfahrtZeit;
private Date bezahlZeit;
private boolean eAuto;
private double schulden;
public Auto(String kennzeichen, Date einfahrtZeit, Date bezahlZeit, Date ausfahrtZeit, boolean eAuto) {
public Auto(String kennzeichen, Date einfahrtZeit) {
this.kennzeichen = kennzeichen;
this.einfahrtZeit = einfahrtZeit;
this.bezahlZeit = bezahlZeit;
this.ausfahrtZeit = ausfahrtZeit;
this.eAuto = eAuto;
this.eAuto = iseAuto();
this.schulden = 0;
}
public String getKennzeichen() {return kennzeichen;}
public Date getEinfahrtZeit() {return einfahrtZeit;}
public Date getBezahlZeit() {return bezahlZeit;}
public Date getAusfahrtZeit() {return ausfahrtZeit;}
public boolean getEAuto() {return eAuto;}
public String getKennzeichen() {
return kennzeichen;
}
public Date getEinfahrtZeit() {
return einfahrtZeit;
}
public Date getBezahlZeit() {
return bezahlZeit;
}
public Date getAusfahrtZeit() {
return ausfahrtZeit;
}
public boolean getEAuto() {
return eAuto;
}
public double getSchulden() {
return schulden;
}
public void setKennzeichen(String kennzeichen) {
this.kennzeichen = kennzeichen;
@ -30,15 +49,28 @@ public class Auto {
this.einfahrtZeit = einfahrtZeit;
}
public void setBezahlZeit(Date bezahlZeit) {
this.bezahlZeit = bezahlZeit;
}
public void setAusfahrtZeit(Date ausfahrtZeit) {
this.ausfahrtZeit = ausfahrtZeit;
}
public void setBezahlZeit(Date bezahlZeit) {
this.bezahlZeit = bezahlZeit;
}
public void setEAuto(boolean eAuto) {
this.eAuto = eAuto;
}
public void setSchulden(double schulden) {
this.schulden = schulden;
}
public void addSchulden(double betrag) {
this.schulden += betrag;
}
private boolean iseAuto() {
String letztesSymbol = kennzeichen.charAt(kennzeichen.length() - 1) + "";
return (letztesSymbol.equals("E") || letztesSymbol.equals("e"));
}
}

View File

@ -1,2 +1,91 @@
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws ParseException {
Scanner sc = new Scanner(System.in);
Parkhaus parkhaus = new Parkhaus();
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm");
sdf.setLenient(false);
while (true) {
try {
System.out.println("Willkommen im Parkhaus der Hochschule Mannheim");
System.out.println("Wollen Sie ");
System.out.println("1. Ins Parkhaus einfahren");
System.out.println("2. Aus dem Parkhaus ausfahren");
System.out.println("3. Bezahlen und ausfahren");
System.out.println("4. Beenden");
int auswahl = sc.nextInt();
sc.nextLine();
if (auswahl == 4) {
System.out.println("Das Programm wird nun beendet.");
System.out.println("Wir wünschen Ihnen noch einen schönen Tag");
break;
}
switch (auswahl) {
case 1:
System.out.println("Bitte geben Sie ihr Kennzeichen ein:");
String kennzeichenEinfahrt = sc.nextLine();
System.out.println("Wann sind Sie in das Parkhaus eingefahren. Bitte im Format TT.MM.JJJJ SS:MM");
String einfahrtEingabe = sc.nextLine();
Date einfahrtZeit = sdf.parse(einfahrtEingabe);
Auto auto = new Auto(kennzeichenEinfahrt, einfahrtZeit);
parkhaus.addAuto(auto);
break;
case 2:
System.out.println("Bitte geben Sie das Kennzeichen des Fahrzeugs ein, welches ausfahren soll :");
String kennzeichenAusfahrt = sc.nextLine();
auto = parkhaus.autoFinden(kennzeichenAusfahrt);
if (auto == null) {
System.out.println("Keine Auto gefunden mit diesem Kennzeichen gefunden.");
} else {
System.out.println("Wann sind Sie aus dem Parkhaus ausgefahren. Bitte im Format TT.MM.JJJJ SS:MM");
String ausfahrtEingabe = sc.nextLine();
Date ausfahrtZeit = sdf.parse(ausfahrtEingabe);
double kosten = parkhaus.berechneParkKosten(auto, ausfahrtZeit);
auto.setSchulden(auto.getSchulden() + kosten);
parkhaus.ausfahrt(kennzeichenAusfahrt, ausfahrtZeit);
}
break;
case 3:
System.out.println("Für welches Kennzeichen sollen die Parkgebühren bezahlt werden");
String kennzeichenBezahlt = sc.nextLine();
auto = parkhaus.autoFinden(kennzeichenBezahlt);
if (auto == null) {
System.out.println("Keine Auto gefunden mit diesem Kennzeichen gefunden.");
} else {
System.out.println("Wann bezahlen Sie? Bitte im Format TT.MM.JJJJ SS:MM ");
String bezahltEingabe = sc.nextLine();
Date bezahltZeit = sdf.parse(bezahltEingabe);
System.out.println(parkhaus.berechneParkKosten(auto, bezahltZeit));
parkhaus.ausfahrt(kennzeichenBezahlt, bezahltZeit);
auto.setSchulden(0);
}
break;
default:
System.out.println("Falsche Eingabe bitte nur 1,2 oder 3 eingeben");
break;
}
}
catch (ParseException e) {
System.out.println("Leider haben Sie ein Datum eingegeben was nicht existiert");
System.out.println("Bitte veruschen Sie es erneut");
}
}
sc.close();
}
}

View File

@ -1,69 +1,125 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Parkhaus {
private double maxNachtPreis;
private double preis;
private double maxTagesPreis;
private int maxParkPlatz;
private Auto[] parkendeAutos;
private int anzahlParkendeAutos;
private int maxPlatz;
private int platz;
private List<Auto> autos;
public double getMaxNachtPreis() {
return maxNachtPreis;
}
public int getPlatz() {
return platz;
}
public double getMaxTagesPreis() {
return maxTagesPreis;
}
public int getMaxParkPlatz() {
return maxParkPlatz;
public int getMaxPlatz() {
return maxPlatz;
}
public Parkhaus(double preis){
this.preis = 1.0;
this.maxNachtPreis = 5;
this.maxTagesPreis = 15;
this.maxParkPlatz = 100;
this.parkendeAutos = new Auto[maxParkPlatz];
this.anzahlParkendeAutos = 0;
public double getPreis() {
return preis;
}
public double getPreis() {return preis;}
public void setPreis(double preis) {
this.preis = preis;
}
public double berechneParkKosten (Auto auto){
int einFahrtStunde = auto.getEinfahrtZeit().getHours();
int ausFahrtStunde = auto.getAusfahrtZeit().getHours();
double kosten;
long parkDauerMinuten = (auto.getBezahlZeit().getTime()-auto.getEinfahrtZeit().getTime());
if (einFahrtStunde >= 20 && ausFahrtStunde <= 06){
kosten = maxNachtPreis;
public void setMaxPlatz(int maxPlatz) {
this.maxPlatz = maxPlatz;
}
if (parkDauerMinuten <= 15){
public void setPlatz(int platz) {
this.platz = platz;
}
public Parkhaus() {
this.preis = 1.0;
this.maxPlatz = 1;
this.platz = getMaxPlatz();
this.maxNachtPreis = 5;
this.maxTagesPreis = 15;
this.autos = new ArrayList<Auto>();
}
public void addAuto(Auto auto) {
if (platz <= 0) {
System.out.println("Das Parkhaus ist voll, Sie können nicht mehr einfahren!");
} else {
autos.add(auto);
platz -= 1;
}
}
public Auto autoFinden(String kennzeichen) {
for (Auto auto : autos) {
if (auto.getKennzeichen().equals(kennzeichen)) {
return auto;
}
}
return null;
}
public void ausfahrt(String kennzeichen, Date ausfahrtZeit) {
Auto auto = autoFinden(kennzeichen);
if (auto == null) {
System.out.println("Das Auto mit dem eingegebenen Kennzeichen " + kennzeichen + " wurde nicht gefunden!");
return;
}
auto.setAusfahrtZeit(ausfahrtZeit);
double kosten = berechneParkKosten(auto, ausfahrtZeit);
System.out.println("Die Koste für das Fahrzeug mit dem eingegebenen Kennzeichen " + kennzeichen + "betragen:");
System.out.println(kosten);
autos.remove(auto);
platz += 1;
}
public double berechneParkKosten(Auto auto, Date ausfahrtZeit) {
Date einfahrtZeit = auto.getEinfahrtZeit();
if (einfahrtZeit == null || ausfahrtZeit == null) {
System.out.println("Es wurde keine Ein- oder ausfahrtzeit gesetzt!");
} else if (ausfahrtZeit.before(einfahrtZeit)) {
System.out.println("Das ausfahren darf nicht vor dem einfahren liegen! ");
}
long parkDauerMinuten = (ausfahrtZeit.getTime() - einfahrtZeit.getTime()) / (1000 * 60);
double kosten = 0;
if (parkDauerMinuten < 0) {
System.out.println("Diese Eingaben sind nicht möglich");
}
int einFahrtStunde = einfahrtZeit.getHours();
int ausFahrtStunde = ausfahrtZeit.getHours();
if (einFahrtStunde >= 20 || ausFahrtStunde <= 6) {
if (parkDauerMinuten <= 15) {
return 0;
}
kosten = maxNachtPreis;
} else {
if (parkDauerMinuten <= 15) {
return 0;
}
parkDauerMinuten -= 15;
long parkDauerStunden = (parkDauerMinuten/60)+1;
kosten = parkDauerStunden*preis;
long parkDauerStunden = (parkDauerMinuten / 60) + 1;
kosten = parkDauerStunden * preis;
if (parkDauerStunden > 24){
kosten = maxTagesPreis*parkDauerStunden/24;
if (parkDauerStunden > 24) {
kosten = maxTagesPreis;
}
if (auto.getEAuto() == true){
kosten*=0.8;
}
if (auto.getEAuto()) {
kosten *= 0.8;
}
return kosten;
}
}

Binary file not shown.

View File

@ -0,0 +1,104 @@
Ich:
Ich habe ein Problem mit Java Code. Ich habe ein Parkhaus programmiert und in der Main Klasse einen Switch-Case. Es wird abgefragt ob man einfahren möchte, bezahlen, ausfahren oder beenden möchte. Nachdem man einfahren auswählt soll man sein kennzeichen und danch das Datum mit Uhrzeit eingeben. Dies passiert über 1,2,3 oder 4 und einem scanner der das eingegebene int ließt. Wenn ich jetzt aber zum beispiel 1 für einfahren wählt wird die eingabe des kennzeichens komplett übersprungen und man kann nur noch direkt das Datum eingeben
ChatGpt:
Es klingt so, als ob es ein Problem mit der Verarbeitung der Benutzereingaben in deinem Switch-Case gibt. Wenn du das Kennzeichen nach der Auswahl des Menüpunktes für das Einfahren abfragen möchtest, solltest du sicherstellen, dass die Eingabeaufforderung für das Kennzeichen direkt nach der Auswahl erfolgt und nicht von einer anderen Eingabe überschrieben wird.
Hier ist ein einfaches Beispiel, das zeigt, wie du das implementieren kannst. Ich werde die Struktur deines Switch-Case darstellen, um das Einfahren, Bezahlen, Ausfahren und Beenden zu demonstrieren:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
boolean running = true;
while (running) {
System.out.println("Wählen Sie eine Option:");
System.out.println("1. Einfahren");
System.out.println("2. Bezahlen");
System.out.println("3. Ausfahren");
System.out.println("4. Beenden");
int option = scanner.nextInt();
scanner.nextLine(); // Leere Zeile einlesen, um den Scanner zu reinigen
switch (option) {
case 1:
System.out.print("Geben Sie Ihr Kennzeichen ein: ");
String kennzeichen = scanner.nextLine();
System.out.print("Geben Sie das Datum mit Uhrzeit ein: ");
String datum = scanner.nextLine();
System.out.println("Auto mit Kennzeichen " + kennzeichen + " ist eingefahren am " + datum);
break;
case 2:
// Logik zum Bezahlen
System.out.println("Bezahlen...");
break;
case 3:
// Logik zum Ausfahren
System.out.println("Ausfahren...");
break;
case 4:
running = false; // Programm beenden
break;
default:
System.out.println("Ungültige Auswahl, bitte versuchen Sie es erneut.");
break;
}
}
scanner.close();
}
}
```
### Erläuterungen:
1. **`scanner.nextLine();` nach `scanner.nextInt();`**: Dies wird verwendet, um den Scanner zu reinigen. Wenn der Benutzer eine ganze Zahl eingibt, bleibt ein Zeilenumbruch im Eingabepuffer. Durch das Hinzufügen von `scanner.nextLine();` wird dieser Zeilenumbruch entfernt, sodass die nächste `nextLine()`-Eingabeaufforderung korrekt funktioniert.
2. **Eingabeaufforderungen**: Die Eingabeaufforderungen für das Kennzeichen und das Datum werden direkt nach der Auswahl der Option gestellt.
### Tipps zur Fehlersuche:
- Stelle sicher, dass die Scanner-Objekte nicht an anderer Stelle in deinem Code das Verhalten beeinflussen.
- Überprüfe, ob du beim Einlesen der Optionen den richtigen Typ verwendest (z. B. `nextInt()` für ganze Zahlen und `nextLine()` für Strings).
- Achte darauf, dass das Programm nicht vorzeitig beendet wird oder in einen unerwarteten Zustand gerät, der die Eingabeaufforderungen überspringt.
Wenn du weitere Details zu deinem bestehenden Code teilst, kann ich dir gezielter helfen!
Ich:
Ist das einlesen einer leeren zeile nach dem Int einlesen notwendig?
ChatGPT:
Ja, das Einlesen einer leeren Zeile nach dem Scannen eines `int` mit `scanner.nextInt()` ist notwendig, wenn du danach mit `scanner.nextLine()` weitere Eingaben vom Benutzer erfassen möchtest. Hier ist der Grund dafür:
- **Eingabepuffer**: Wenn du eine ganze Zahl mit `nextInt()` liest, wird nur die Zahl selbst aus dem Eingabepuffer gelesen. Der Zeilenumbruch (Enter-Taste), den der Benutzer gedrückt hat, bleibt jedoch im Puffer. Das bedeutet, dass die nächste `nextLine()`-Eingabe (die erwartet, dass der Benutzer einen String eingibt) sofort den verbleibenden Zeilenumbruch liest und nicht auf die Eingabe des Benutzers wartet.
### Beispiel:
Wenn du dies nicht tust:
```java
int option = scanner.nextInt(); // Benutzer gibt 1 ein und drückt Enter
String kennzeichen = scanner.nextLine(); // Diese Zeile liest den Zeilenumbruch und überspringt die Eingabe
```
Der `kennzeichen`-String wird leer sein, weil der Zeilenumbruch sofort gelesen wird, ohne dass der Benutzer die Möglichkeit hat, etwas einzugeben.
### Lösung:
Um sicherzustellen, dass die Benutzeraufforderung korrekt funktioniert, solltest du nach dem Scannen der Zahl `nextLine()` aufrufen, um den Zeilenumbruch zu konsumieren:
```java
int option = scanner.nextInt();
scanner.nextLine(); // Liest den Zeilenumbruch
String kennzeichen = scanner.nextLine(); // Jetzt kann der Benutzer korrekt das Kennzeichen eingeben
```
Wenn du sicherstellen möchtest, dass die Eingabeaufforderungen für das Kennzeichen und das Datum wie gewünscht funktionieren, ist dieser Schritt wichtig.

Binary file not shown.

Binary file not shown.