Compare commits
7 Commits
3f363fedbf
...
d4ead6ec4b
Author | SHA1 | Date |
---|---|---|
Leon Maximilian Löhle | d4ead6ec4b | |
Leon Maximilian Löhle | 247182cb34 | |
Leon Maximilian Löhle | b9e703500f | |
Leon Maximilian Löhle | 76141da3f1 | |
Leon Maximilian Löhle | a0da70b766 | |
Leon Maximilian Löhle | 428a16efde | |
Leon Maximilian Löhle | 4c19b4c848 |
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
|
@ -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
|
|
@ -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.
|
|
@ -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"));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
if (parkDauerMinuten <= 15){
|
||||
return 0;
|
||||
}
|
||||
parkDauerMinuten -= 15;
|
||||
long parkDauerStunden = (parkDauerMinuten/60)+1;
|
||||
kosten = parkDauerStunden*preis;
|
||||
|
||||
if (parkDauerStunden > 24){
|
||||
kosten = maxTagesPreis*parkDauerStunden/24;
|
||||
}
|
||||
|
||||
if (auto.getEAuto() == true){
|
||||
kosten*=0.8;
|
||||
}
|
||||
|
||||
return kosten;
|
||||
public void setMaxPlatz(int maxPlatz) {
|
||||
this.maxPlatz = maxPlatz;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
if (parkDauerStunden > 24) {
|
||||
kosten = maxTagesPreis;
|
||||
}
|
||||
}
|
||||
if (auto.getEAuto()) {
|
||||
kosten *= 0.8;
|
||||
}
|
||||
return kosten;
|
||||
}
|
||||
}
|
||||
|
|
Binary file not shown.
|
@ -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.
Loading…
Reference in New Issue