Fehlersuche-kann mir jemand helfen?

Garfild2015

Aktives Mitglied
Ich suche verzweifelt den Fehler, warum dieser Tickeautomat nicht die richtige
gesammtsumme ausgibt.
findet ihn jemand und kann ihn mir vielleicht verbessern?


Die Gesamtsumme sollte = Kinderticket+Erwachsnenetickets *Linie sein , aber das funktioniert nicht ganz 🙂



Code:
public class Ticketautomat
{
    // Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
    private int preis;
    private int bisherGezahlt;
    private int gesamtsumme;
    private int ticketpreis;
    public int kindertickets;
    public int erwachsenentickets;
    public int streckenpreis;
    public int neuerPreis;
 
    private String linie;
    private String name;
    public Ticketautomat()
    {
 
        preis = ticketpreis;
        preis=540;
        
        
        erwachsenentickets= 0;
        kindertickets = 0;
        bisherGezahlt = 0;
        gesamtsumme = 0;
        linie = "Gelsenkirchen";
 
        name = "Person";
    }
 
    public void KinderTickets(int neueKindertickets){
        kindertickets=neueKindertickets;
        preis= (neueKindertickets*preis)/2;
 
    }
 
    public void Erwachsenetickets(int neueErwachsenentickets){
        erwachsenentickets=neueErwachsenentickets;
        preis=preis;
    }
 
    public void linieÄndern(String neueLinie)
    {
        linie = neueLinie;
 
        if("München".equals(neueLinie)){
            preis=2550;
 
        }
        if("Hamburg".equals(neueLinie)){
            preis=1550;   
        }
        if("Düsseldorf".equals(neueLinie)){
            preis=750;   
        }
        if("Stutgart".equals(neueLinie)){
           preis=850;   
        }
        if("München".equals(neueLinie)){
            preis=1050;   
        }
        if("Berlin".equals(neueLinie)){
           preis=1280;   
        }
        
 
    }
 
    public void neuenPreisFestsetzen(int neuerPreis)
    {
        if(bisherGezahlt==0){
            preis=neuerPreis;
        }else{
            System.out.println("Der Preis kann während einer Tranaktion nicht geändert werden");
 
        }
    }
 
    public int gibPreis()
    {
        return preis;
    }
 
 
    
 
    public int gibBisherGezahltenBetrag()
    {
        return bisherGezahlt;
    }
 
    public void geldEinwerfen(int betrag)
    {
        if(betrag==10 || betrag ==20|| betrag==50|| betrag ==50|| betrag==100|| betrag==200||betrag==500||betrag==1000){
            bisherGezahlt= bisherGezahlt+betrag;
        } else{
            System.out.println("Der Betrag ist nicht zulässig. Bitte 10, 20 oder 50 Cent,1 Euro,2 Euro,5 Euro oder 10 Euro einwerfen");
        }
 
    }
 
    public void personaliesierung(String neuerName){
        name = neuerName ;
    }
 
    public void geldAuszahlen()
    {
        if (bisherGezahlt >0){
            System.out.println("Geldrückgabe:"+ bisherGezahlt);
            bisherGezahlt=0;
        }
    }
 
    public void ticketDrucken()
    {
        if(bisherGezahlt>=preis){
 
            System.out.println("######################################");
            System.out.println("#_______________Ticket_______________#");
            System.out.println("#Datum:07.03.2020 Uhrzeit: 13:00Uhr  #");
            System.out.println("Name:"+name);
            System.out.println("# Von:Gladbeck Nach:"+linie+ "                          #");
 
            System.out.println("#"+ preis/100 +","+ (preis %100)+"Euro");                         
            System.out.println("######################################");
            System.out.println();
 
            gesamtsumme= gesamtsumme + bisherGezahlt;
            bisherGezahlt= bisherGezahlt-preis;
 
            geldAuszahlen();
 
        }
 
        else if (bisherGezahlt<preis)  {
            int fehlt;
            fehlt= preis-bisherGezahlt;
            System.out.println("Es fehlt noch"+ fehlt+ "Cent!");
            System.out.println();
 
        }
 
    }
}
 
Dein Code ergibt für mich insgesamt keinen Sinn. Das liegt hauptsächlich daran, dass du 'preis' für alles Mögliche verwendest. Ist es der Preis für die Strecke? Ist es der zu zahlende Preis? Das kommt nicht klar raus und ich glaube du vermischst es hier auch.
 
Code:
public void linieÄndern(String neueLinie) {
    linie = neueLinie;

    if("München".equals(neueLinie)){
        preis=2550;

    }
    if("Hamburg".equals(neueLinie)){
        preis=1550;
    }
    if("Düsseldorf".equals(neueLinie)){
        preis=750;
    }
    if("Stutgart".equals(neueLinie)){
        preis=850;
    }
    if("München".equals(neueLinie)){
        preis=1050;
    }
    if("Berlin".equals(neueLinie)){
        preis=1280;
    }
}

Außer ganz ehrlich, alleine bei dieser Methode krümmen sich meine Zehennägel 😀
Besser wäre ein switch-Case (oder ne Map oder sowas), weil du irgendwie auch einen default/Error Case benötigst. Was passiert, wenn die neueLinie von keinem if angesprochen wird? Du hast hier auch 2x München drin und Stuttgart fehlt ein t.
 
Code:
public void linieÄndern(String neueLinie) {
    linie = neueLinie;

    if("München".equals(neueLinie)){
        preis=2550;

    }
    if("Hamburg".equals(neueLinie)){
        preis=1550;
    }
    if("Düsseldorf".equals(neueLinie)){
        preis=750;
    }
    if("Stutgart".equals(neueLinie)){
        preis=850;
    }
    if("München".equals(neueLinie)){
        preis=1050;
    }
    if("Berlin".equals(neueLinie)){
        preis=1280;
    }
}

Außer ganz ehrlich, alleine bei dieser Methode krümmen sich meine Zehennägel 😀
Besser wäre ein switch-Case (oder ne Map oder sowas), weil du irgendwie auch einen default/Error Case benötigst. Was passiert, wenn die neueLinie von keinem if angesprochen wird? Du hast hier auch 2x München drin und Stuttgart fehlt ein t.

Wir haben gerade erst angefangen mit dem programmieren, bis uns Corona unterbrochen hat 🙂
Das haben wir noch mit unsere Lehrerin gemacht.
 
Der Code ist wie schon erwähnt was Preis Handling angeht komplett unbrauchbar.

Fragen, die du mal beantworten solltest:
* Wo wird der Gesamtpreis gespeichert?
* Wo wird der Preis für das gewählte Ziel gespeichert?
* Wo der Preis für ein Kinderticket gespeichert?
* Wo wird der Preis für ein Erwachsenenticket gespeichert?
* Wo wird die Anzahl der Erwachsenentickets gespichert?
* Wo wird die Anzahl der Kindertickets gespeichert?

Bei dir wird 1 bis 4 gleichzeitig wie es aussieht in "Preis" gespeichert - dass kann nicht funktionieren.
 
1588930327819.png

Eine gute IDE zeigt übrigens auch, welche Parameter gar nicht verwendet werden. Diese sind hier grau. Spätestens wenn man sowas sieht ist irgendwas verkehrt meistens 🙂 Und auf Grund des Geheimhaltungsprinzips sollten letzte 4 Attribute auch bitte nicht public sein.
 
Der Code ist wie schon erwähnt was Preis Handling angeht komplett unbrauchbar.

Fragen, die du mal beantworten solltest:
* Wo wird der Gesamtpreis gespeichert?
* Wo wird der Preis für das gewählte Ziel gespeichert?
* Wo der Preis für ein Kinderticket gespeichert?
* Wo wird der Preis für ein Erwachsenenticket gespeichert?
* Wo wird die Anzahl der Erwachsenentickets gespichert?
* Wo wird die Anzahl der Kindertickets gespeichert?

Bei dir wird 1 bis 4 gleichzeitig wie es aussieht in "Preis" gespeichert - dass kann nicht funktionieren.


Könne sie mir sagen, was ich dann ändern soll ?
 
Könne sie mir sagen, was ich dann ändern soll ?

Eigentlich brauchst du nur 3 Attribute statt 8 (zumindest aus meiner Sicht)

- Preis für die ausgewählte Strecke: wird gesetzt bei Streckenauswahl
- Zu zahlender Preis: Wird bei Kind um n*Streckenpreis/2 und bei Erwachsenen um n*Streckenpreis erhöht
- Gezahlter Preis: Wird bei Münzeinwurf erhöht

Du hast eine überschaubare Anzahl an Events, welche du als Methoden darstellen kannst:
- Strecke auswählen
- Kindticket hinzufügen (ggf. auch entfernen)
- Erwachsenenticket hinzufügen (ggf. auch entfernen)
- Münze einwerfen
- Ticket Drucken
- Geldrückgabe
- (ggf. Abbrechen)
- ...

Also Statement: Reduziere deinen Code auf das nötigste.
 
Variablen sauber definieren und entsprechend nutzen!

Spiel doch einfach einmal durch, wie sich preis verändert, wenn ich Kindertickets bestelle:
- Ich will 10.
- Ach nein, ich will 20!
- Ach nein - doch nur 1!

==> Was ist dann der Preis?

Nutz klare Begriffe:
- linienPreis für den Preis eines Erwachsenentickets für die Linie würde ich zuerst einführen bzw. preis umbenennen.
- Dann schaust Du Dir den Code an. Beim setzen der Anzahl der Kindertickets ist der Linienpreis natürlich nicht anzupacken. Und: Wenn ich einen Aufruf setzeKinderTickets (Nur "KinderTickets" besagt nichts. Methoden bitte immer mit Verb, damit sie aussagen, was sie machen) sehe, dann erwarte ich, dass diese Methode nur die KinderTickets setzt. Aber nicht irgend einen Preis!
- Den Gesamtpreis brauchst Du dann nicht wirklich, denn den kannst Du immer berechnen: anzahlErwachsenentickets * linienPreis + anzahlKinderTickets * linienPreis / 2. (Hier kannst Du auch erkennen: kinderTickets ist kein guter Name - da steht ja eine Anzahl drin und keine Tickets!)
 
Eigentlich brauchst du nur 3 Attribute statt 8 (zumindest aus meiner Sicht)

- Preis für die ausgewählte Strecke: wird gesetzt bei Streckenauswahl
- Zu zahlender Preis: Wird bei Kind um n*Streckenpreis/2 und bei Erwachsenen um n*Streckenpreis erhöht
- Gezahlter Preis: Wird bei Münzeinwurf erhöht

Du hast eine überschaubare Anzahl an Events, welche du als Methoden darstellen kannst:
- Strecke auswählen
- Kindticket hinzufügen (ggf. auch entfernen)
- Erwachsenenticket hinzufügen (ggf. auch entfernen)
- Münze einwerfen
- Ticket Drucken
- Geldrückgabe
- (ggf. Abbrechen)
- ...

Also Statement: Reduziere deinen Code auf das nötigste.
Code:
Ich fange mal vorne an. Was halten sie von dieser Methode für den Streckenpreis?


public class Ticketautomat{
    int streckenpreis;
    String  linie;
    public void Streckenauswahl(String neueLinie)
    {
        linie = neueLinie;

        if("München".equals(neueLinie)){
            streckenpreis=2550;

        }
        if("Hamburg".equals(neueLinie)){
            streckenpreis=1550;   
        }
        if("Düsseldorf".equals(neueLinie)){
            streckenpreis=750;   
        }
        if("Stutgart".equals(neueLinie)){
            streckenpreis=850;   
        }
        if("München".equals(neueLinie)){
            streckenpreis=1050;   
        }
        if("Berlin".equals(neueLinie)){
            streckenpreis=1280;   
        }

    }
}
 
Da du ja etwas lernen sollst, zeige ich Dir einfach einmal das switch auf Strings:
Code:
public class Ticketautomat{
    int streckenpreis;
    String  linie;
    public void Streckenauswahl(String neueLinie)
    {
        switch (neueLinie) {
            case "München":
                streckenpreis=2250;
                break;
                
            case "Hamburg":
                streckenpreis=1550;
                break;

            case "Düsseldorf":
                streckenpreis=750;
                break;

            case "Stuttgart":
                streckenpreis=850;
                break;

            case "Berlin":
                streckenpreis=1250;
                break;
                
            default:
                // Hier noch eine Fehlermeldung ausgeben!
                return; // return statt break um die Methode zu verlassen.
        }
        
        linie = neueLinie;
    }
}
 
Da du ja etwas lernen sollst, zeige ich Dir einfach einmal das switch auf Strings:
Code:
public class Ticketautomat{
    int streckenpreis;
    String  linie;
    public void Streckenauswahl(String neueLinie)
    {
        switch (neueLinie) {
            case "München":
                streckenpreis=2250;
                break;
               
            case "Hamburg":
                streckenpreis=1550;
                break;

            case "Düsseldorf":
                streckenpreis=750;
                break;

            case "Stuttgart":
                streckenpreis=850;
                break;

            case "Berlin":
                streckenpreis=1250;
                break;
               
            default:
                // Hier noch eine Fehlermeldung ausgeben!
                return; // return statt break um die Methode zu verlassen.
        }
       
        linie = neueLinie;
    }
}

Fehlermeldung im Sinne von "Diese Strecke ist nicht vorhanden "?
Sollte man da nicht lieber einen "Standardpreis" eingeben, damit immer ein Preis vorhanden ist ?
 
Java:
public class Reise {
    enum Reiseziel {
        München(2250),
        Hamburg(1550),
        Düsseldorf(750),
        Stuttgart(850),
        Berlin(1250);

        private int streckenpreis;

        private Reiseziel(int streckenpreis) {
            this.streckenpreis = streckenpreis;
        }
    }

    
  public static void main(String[] args) {
    System.out.println("Bitte wähle eine Strecke");

    for (int i = 0; i < Reiseziel.values().length; i++) {
        Reiseziel moeglichesReiseziel = Reiseziel.values()[i];
        System.out.println(i + ": " + moeglichesReiseziel.name());
    }
    try {
        int auswahl = new Scanner(System.in).nextInt();
        Reiseziel gewaehltesReiseziel = Reiseziel.values()[auswahl];
        System.out.println("Streckenpreis von " + gewaehltesReiseziel.streckenpreis + " für das Reiseziel " + gewaehltesReiseziel.name());
    } catch (ArrayIndexOutOfBoundsException | InputMismatchException e) {
        System.out.println("Ungültige Auswahl.");
    }
}
}

Ausgabe:
Code:
Bitte wähle eine Strecke
0: München
1: Hamburg
2: Düsseldorf
3: Stuttgart
4: Berlin
0
Streckenpreis von 2250 für das Reiseziel München



Du kannst die Enum dann beliebig erweitern ohne den Rest anfassen zu müssen. Also jedes weitere mögliche Reiseziel ist nur eine Zeile Code
 
Bei mir zeigt das Programm noch Fehler an, muss ich noch irgendwas als import drüber schreiben ?




Java:
public class Reise {
    enum Reiseziel {
        München(2250),
        Hamburg(1550),
        Düsseldorf(750),
        Stuttgart(850),
        Berlin(1250);

        private int streckenpreis;

        private Reiseziel(int streckenpreis) {
            this.streckenpreis = streckenpreis;
        }
    }

   
  public static void main(String[] args) {
    System.out.println("Bitte wähle eine Strecke");

    for (int i = 0; i < Reiseziel.values().length; i++) {
        Reiseziel moeglichesReiseziel = Reiseziel.values()[i];
        System.out.println(i + ": " + moeglichesReiseziel.name());
    }
    try {
        int auswahl = new Scanner(System.in).nextInt();
        Reiseziel gewaehltesReiseziel = Reiseziel.values()[auswahl];
        System.out.println("Streckenpreis von " + gewaehltesReiseziel.streckenpreis + " für das Reiseziel " + gewaehltesReiseziel.name());
    } catch (ArrayIndexOutOfBoundsException | InputMismatchException e) {
        System.out.println("Ungültige Auswahl.");
    }
}
}

Ausgabe:
Code:
Bitte wähle eine Strecke
0: München
1: Hamburg
2: Düsseldorf
3: Stuttgart
4: Berlin
0
Streckenpreis von 2250 für das Reiseziel München



Du kannst die Enum dann beliebig erweitern ohne den Rest anfassen zu müssen. Also jedes weitere mögliche Reiseziel ist nur eine Zeile Code
Code:
import java.util.List;
import java.util.ArrayList;
import java.util.Scanner;
public class Ticketautomat{
    int streckenpreis;
    String  linie;
    public class Reise {
        enum Reiseziel {            Fehler wird angezeigt:enum declaration allowed onlin in static contexts
            München(2250),
            Hamburg(1550),
            Düsseldorf(750),
            Stuttgart(850),
            Berlin(1250);

            private int streckenpreis;

            private Reiseziel(int streckenpreis) {
                this.streckenpreis = streckenpreis;
            }
        }

        public static void main(String[] args) {          Fehler wird angezeigt:Illegal staic declaration in inner class Ticketautomat
            System.out.println("Bitte wähle eine Strecke");

            for (int i = 0; i < Reiseziel.values().length; i++) {
                Reiseziel moeglichesReiseziel = Reiseziel.values()[i];
                System.out.println(i + ": " + moeglichesReiseziel.name());
            }
            try {
                int auswahl = new Scanner(System.in).nextInt();
                Reiseziel gewaehltesReiseziel = Reiseziel.values()[auswahl];
                System.out.println("Streckenpreis von " + gewaehltesReiseziel.streckenpreis + " für das Reiseziel " + gewaehltesReiseziel.name());
            } catch (ArrayIndexOutOfBoundsException | InputMismatchException e) {   Feheler wird angezeigt: cannot find symbol: InputMismatchExpection
                System.out.println("Ungültige Auswahl.");
            }
        }
    }
}
 
Mein Code war nur ein Beispiel! Er war keinesfalls dazu geeignet ihn copy&paste einfach in deine Klasse reinzupacken. Nur für den Wiedererkennungswert habe ich deine Werte verwendet. Er sollte nur zeigen wie das Enum funktionieren kann. Bitte mache entsprechende Anpassungen. Du könntest z.B. auch den Namen eingeben lassen statt Nummer und den String per Reiseziel.valueOf(eingabeName) wieder dem Enum zuordnen. Dann müsstest du aber auch eine andere Exception abfangen. Hier mal diese andere Variante (wieder nur Beispiel!):
Java:
public class Reise {
    enum Reiseziel {
        München(2250),
        Hamburg(1550),
        Düsseldorf(750),
        Stuttgart(850),
        Berlin(1250);

        private int streckenpreis;

        private Reiseziel(int streckenpreis) {
            this.streckenpreis = streckenpreis;
        }
    }

    public static void main(String[] args) {
        System.out.println("Bitte wähle eine Strecke");

        for (Reiseziel moeglichesReiseziel : Reiseziel.values()) {
            System.out.println("*" + moeglichesReiseziel.name());
        }
        try {
            System.out.print("> ");
            String auswahl = new Scanner(System.in).next();
            Reiseziel gewaehltesReiseziel = Reiseziel.valueOf(auswahl);
            System.out.println("Streckenpreis von " + gewaehltesReiseziel.streckenpreis + " für das Reiseziel " + gewaehltesReiseziel.name());
        } catch (IllegalArgumentException e) {
            System.out.println("Ungültige Auswahl.");
        }
    }
}

Ausgabe:
Code:
Bitte wähle eine Strecke
*München
*Hamburg
*Düsseldorf
*Stuttgart
*Berlin
> Stuttgart
Streckenpreis von 850 für das Reiseziel Stuttgart
 
Zuletzt bearbeitet:
Mein Code war nur ein Beispiel! Er war keinesfalls dazu geeignet ihn copy&paste einfach in deine Klasse reinzupacken. Er sollte nur zeigen wie das Enum funktionieren kann. Bitte mache entsprechende Anpassungen. Du könntest z.B. auch den Namen eingeben lassen statt Nummer und den String per Reiseziel.valueOf(eingabeName) wieder dem Enum zuordnen. Dann müsstest du aber auch eine andere Exception abfangen. Hier mal diese andere Variante (wieder nur Beispiel!):
Java:
public class Reise {
    enum Reiseziel {
        München(2250),
        Hamburg(1550),
        Düsseldorf(750),
        Stuttgart(850),
        Berlin(1250);

        private int streckenpreis;

        private Reiseziel(int streckenpreis) {
            this.streckenpreis = streckenpreis;
        }
    }

    public static void main(String[] args) {
        System.out.println("Bitte wähle eine Strecke");

        for (Reiseziel moeglichesReiseziel : Reiseziel.values()) {
            System.out.println("*" + moeglichesReiseziel.name());
        }
        try {
            System.out.print("> ");
            String auswahl = new Scanner(System.in).next();
            Reiseziel gewaehltesReiseziel = Reiseziel.valueOf(auswahl);
            System.out.println("Streckenpreis von " + gewaehltesReiseziel.streckenpreis + " für das Reiseziel " + gewaehltesReiseziel.name());
        } catch (IllegalArgumentException e) {
            System.out.println("Ungültige Auswahl.");
        }
    }
}

Ausgabe:
Code:
Bitte wähle eine Strecke
*München
*Hamburg
*Düsseldorf
*Stuttgart
*Berlin
> Stuttgart
Streckenpreis von 850 für das Reiseziel Stuttgart

Danke für ihre Mühe, aber so weit sind wir in Informatik noch nicht und ich glaube ich mache das lieber mit dem switch-case, dass habe ich nämlich verstanden.
 
Ich denke ich würde es in der Methode lassen, aber sie abändern.
1. Methoden sind typischer Weise Aktionen. Benenne sie auch so. z.B. "addChildTickets" (man beachte außerdem den konventionellen lowerCamelCase)
2. Den Wert "kindertickets" (bzw. "erwachsenentickets") brauchst du nicht speichern, außer du möchtest diese Anzahl nochmal beim Drucken des Tickets verwenden
3. Du darfst preis natürlich nicht fest zuweisen, sondern musst diesen erhöhen. Das kannst du mit dem += Operator machen
Java:
zuZahlenderPreis += anzahlKinderTickets * streckenNormalPreis / 2;
// bzw.
zuZahlenderPreis += anzahlErwachsenenTickets * streckenNormalPreis;
 
Ich denke ich würde es in der Methode lassen, aber sie abändern.
1. Methoden sind typischer Weise Aktionen. Benenne sie auch so. z.B. "addChildTickets" (man beachte außerdem den konventionellen lowerCamelCase)
2. Den Wert "kindertickets" (bzw. "erwachsenentickets") brauchst du nicht speichern, außer du möchtest diese Anzahl nochmal beim Drucken des Tickets verwenden
3. Du darfst preis natürlich nicht fest zuweisen, sondern musst diesen erhöhen. Das kannst du mit dem += Operator machen
Java:
zuZahlenderPreis += anzahlKinderTickets * streckenNormalPreis / 2;
// bzw.
zuZahlenderPreis += anzahlErwachsenenTickets * streckenNormalPreis;

Ich würde gerne die Option dabei schreiben, dass man jeder Zeit die Anzahl der Tickets abrufen kann.
Wie kann man das machen?
 
Mache ich das dann mit return?

Wenn ich es mi return mache, kommte eine Fehlermeldung: incompertible types: unexpected return value

Code:
public void KindertickesHinzufuegen(int Kindertickets) {
        anzahlKindertickets= Kindertickets;   
        zuZahlenderPreis += anzahlKindertickets * streckenpreis / 2; 

    }

    public void KinderticketsAnzahlAbrufen(){
        return anzahlKindertickets; 
    }

    public void ErwachsenenticketsHinzufügen(int Erwachsenentickets){
        anzahlErwachsenentickets=Erwachsenentickets; 
        zuZahlenderPreis += anzahlErwachsenentickets * streckenpreis; 
    }
    
    public void ErwachsenenticketsAbrufen(){
     return anzahlErwachsenentickets;   
    }
 
Wenn ich es mi return mache, kommte eine Fehlermeldung: incompertible types: unexpected return value

Code:
public void KindertickesHinzufuegen(int Kindertickets) {
        anzahlKindertickets= Kindertickets;  
        zuZahlenderPreis += anzahlKindertickets * streckenpreis / 2;

    }

    public void KinderticketsAnzahlAbrufen(){
        return anzahlKindertickets;
    }

    public void ErwachsenenticketsHinzufügen(int Erwachsenentickets){
        anzahlErwachsenentickets=Erwachsenentickets;
        zuZahlenderPreis += anzahlErwachsenentickets * streckenpreis;
    }
   
    public void ErwachsenenticketsAbrufen(){
     return anzahlErwachsenentickets;  
    }
hab den Fehler gefunden 🙂
 
Dann kannst du die Zahl ruhig speichern. So lange du den gespeicherten Wert irgendwann rufen willst ist das ok. Sonst wäre es überflüsdig
Code:
    public void geldEinwerfen(int betrag)
    {
        if(betrag==10 || betrag ==20|| betrag==50|| betrag ==50|| betrag==100|| betrag==200||betrag==500||betrag==1000){
            bisherGezahlt= bisherGezahlt+betrag;
        } else{
            System.out.println("Der Betrag ist nicht zulässig. Bitte 10, 20 oder 50 Cent,1 Euro,2 Euro,5 Euro oder 10 Euro einwerfen");
        }

    }

Würden sie hier dran was ändern ?
 
Nur ne Kleinigkeit. Die kannst die eine Zeile verkürzen zu

bisherGezahlt += betrag;
Ok,
Erstmal Danke für die ganze Hilfe.
Ich würde gerne eine Methode für die Gesamtsumme hinzufügen, aber ich weiß nicht genau wie 🙂
Ich habe den bisherigen Code nochmal komplett mitgepostet.
Code:
public class Ticketautomat{
    int streckenpreis;
    int anzahlKindertickets;
    int anzahlErwachsenentickets;
    int zuZahlenderPreis;
    int bisherGezahlt;
    String  linie;
    public void Streckenauswahl(String neueLinie)
    {
        switch (neueLinie) {
            case "München":
            streckenpreis=2250;
            break;

            case "Hamburg":
            streckenpreis=1550;
            break;

            case "Düsseldorf":
            streckenpreis=750;
            break;

            case "Stuttgart":
            streckenpreis=850;
            break;

            case "Berlin":
            streckenpreis=1250;
            break;

            default:
            System.out.println("Ziel nicht verfügbar. Bitte neues Ziel eingeben");  //  eine Fehlermeldung ausgeben!
            return; // return statt break um die Methode zu verlassen.
        }

        linie = neueLinie;
    }

    public void KindertickesHinzufuegen(int Kindertickets) {
        anzahlKindertickets= Kindertickets;   
        zuZahlenderPreis += anzahlKindertickets * streckenpreis / 2; 

    }

    public int KinderticketsAnzahlAbrufen(){
        return anzahlKindertickets; 
    }

    public void ErwachsenenticketsHinzufügen(int Erwachsenentickets){
        anzahlErwachsenentickets=Erwachsenentickets; 
        zuZahlenderPreis += anzahlErwachsenentickets * streckenpreis; 
    }

    public int ErwachsenenticketsAbrufen(){
        return anzahlErwachsenentickets;   
    }

    public void geldEinwerfen(int betrag)
    {
        if(betrag==10 || betrag ==20|| betrag==50|| betrag ==50|| betrag==100|| betrag==200||betrag==500||betrag==1000){
            bisherGezahlt+=betrag;
        } else{
            System.out.println("Der Betrag ist nicht zulässig. Bitte 10, 20 oder 50 Cent,1 Euro,2 Euro,5 Euro oder 10 Euro einwerfen");
        }

    }

}
 
Ja. x += y ist äquivalent zu x = x + y
Jetzt bräuchte ich ein aller letztes mal ihre Meinung zu der Methode Ticket druckern
Code:
public void ticketDrucken()
    {
        if(bisherGezahlt>=preis){

            System.out.println("######################################");
            System.out.println("#_______________Ticket_______________#");
            System.out.println("#Datum:07.03.2020 Uhrzeit: 13:00Uhr  #");
            System.out.println("Name:"+name);
            System.out.println("# Von:Gladbeck Nach:"+linie+ "                          #");

            System.out.println("#"+ preis/100 +","+ (preis %100)+"Euro");                         
            System.out.println("######################################");
            System.out.println();

            gesamtsumme= gesamtsumme + bisherGezahlt;
            bisherGezahlt= bisherGezahlt-preis;

            geldAuszahlen();

        }

        else if (bisherGezahlt<preis)  {
            int fehlt;
            fehlt= preis-bisherGezahlt;
            System.out.println("Es fehlt noch"+ fehlt+ "Cent!");
            System.out.println();

        }

    }
 

Neue Themen


Zurück
Oben