# mit BlueJ einen Ticketautomaten programmieren



## mc11 (3. Okt 2011)

hi @ all

ich hab ne aufgabe die mir echt schwer fällt weil ich erst seit paar tagen mit java programmiere oder besser gesagt mit blueJ und so auch keine vorkenntnisse in sachen programmieren habe... und zwar soll ich einen Ticketautomaten programmieren aus interner sicht... ich versuch seit 2 tagen das zu schaffen das er mir das ausrechnet aber irgendwie seh ich da auch nicht ganz durch mit den zusammenhängen und wie man blueJ zum sinnvollen rechnen bringt... und zwar hab ich mir das so gedacht das es einen festen preis gibt für das ticket(ich möchte das es 20 euro kostet) dann soll man noch auswählen können wie viele tickets man kaufen will und ausserdem soll berücksichtigt werden wie viel schon eingezahlt wurde und später soll er mir den zu zahlenden betrag ausrechnen...

und so sieht mein loch aus wo ich feststecke und nicht weiter komme



```
public class Ticketautomat
{
    // Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
    private int preis;
    private int bisherGezahlt;
    private int gesamtsumme;
    private int anzTickets;

    /**
     * Konstruktor für Objekte der Klasse Ticketautomat
     */
    public Ticketautomat(int bisherGezahlt, int anzTickets){
    preis             =20;
    bisherGezahlt     =0;
    gesamtsumme       =0;
    anzTickets        =0;
} //Ticketautomat
    
    // Zugriffsmethoden
    public int getbisherGezahlt () {return bisherGezahlt;}
    public int getgesamtsumme () {return gesamtsumme;}
    public int getanzTickets () {return anzTickets;}
    
    // Verarbeitung
    public void setPreis (int neu){
        preis = neu;
    } //setPreis
    
    //Ausgabe
    public void ausgabe() {
        System.out.println("Preis=" + preis+"Geldsumme="+anzTickets);
    }//ausgabe
}
```

über fehlerhinweise die fehlerzahl wird bestimmt ziemlich hoch sein, wäre ich sehr erfreut und auch über mögliche tipps wie man es besser machen kann 

danke im voraus


----------



## Gassst (3. Okt 2011)

Ich versteh deinen Konstruktor nicht, bzw. wozu du die beiden Parameter bisherGezahlt und anzTickets übergibst, zumal du diese Werte gar nicht benutzt.
Ich würde die beiden Parameter aus dem Konstruktor streichen und stattdessen zwei weitere Methoden erstellen: geldEinzahlen(int geld) und anzahlTicketsSetzen(int anzahlTickets), die die entsprechenden Instanzvariablen aktualisieren (falls das die Aufgabenstellung nicht anders vorsieht)
Deine ausgabe() Methode ist unvollständig, da 1. der Gesamtpreis ergibt sich aus anzahlTickets * preis (du gibst nur anzTickets aus). Außerdem fehlt noch der noch zu zahlende Betrag (gesamtpreis - bereitsEingezahltesGeld).


----------



## mc11 (3. Okt 2011)

danke ja so wie du sagst ist es schon besser formuliert danke  die ausgabe zu programmieren ist für mich irgendwie nicht verständlich wie schreibe ich denn soeine ausgabe wenn ich ein * zeichen in den system.out. rein hau denn schmeißt er mir ne fehlermeldung


----------



## Gasssst (3. Okt 2011)

Dann mach Klammern um den Term oder speichere den Wert vorher in eine eigene lokale Variable (int gesamtpreis = ... int nochZuBezahlen = ...)


----------



## KingOfExceptions (3. Okt 2011)

wenn du möchtest kann ich dir das programm schreiben


----------



## Fab1 (3. Okt 2011)

Anfänger97 hat gesagt.:


> wenn du möchtest kann ich dir das programm schreiben



Lass ihn das mal ruhig selbst machen 

Man soll hier ja auch etwas lernen. Und außerdem ist es ja nicht kompliziert ich denke da kommt man relativ schnell selbst drauf. Lieber 10 min länger überlegen und es nächstes mal gleich wissen, anstatt nächstes mal wieder nachfragen zu müssen


----------



## KingOfExceptions (3. Okt 2011)

naja ich denke er hat sich hier schon gedanken gemacht bevor er hier was postet.  außerdem ist es ja nur ein angebot, wenn er nicht will brauch er ja auch nicht


----------



## dehlen (3. Okt 2011)

also ich weiß nicht inwiefern du schon mit dem Scanner bzw dem BufferedReader vertraut bist aber das könnte die Angelegenheit sehr erleichtern also quasi so:

mainMethode {
Preis pro Ticket festlegen
AnzahlTickets abfragen und auslesen
Einzahlung abfragen und auslesen
Nun Gesamtsumme, sowie den noch zu bezahlenden Betrag ausrechnen
Gesamtsumme und noch zu bezahlenden Betrag ausgeben
}


----------



## C_A (4. Okt 2011)

Die komplette Lösung ist im BlueJ-Buch von Barnes / Kölling zu finden, das in den Schulen häufig eingesetzt wird. Der Ticket-Automat wird da ausführlich besprochen.


----------



## sillydude (5. Okt 2011)

hey erstmal,

für 2 tage java eine beachtliche leistung, ich finde aber auch wie schon vorher von jemand anderem erwähnt, du solltest es wegen des lerneffekts selbst herausfinden, ich habe dir hierfür mal eine andere version geschrieben, im grunde zwar funktionsfähig, doch einige methoden werden z.B. nie aufgerufen, andere methoden fehlen noch und Exceptionhandling ist ebenfalls nicht dabei. Allerdings hoffe ich, dass du dies einfach mal in eine Datei kopierst und ausprobierst bzw. erweiterst. Tja dann viel spaß, hoffe ich konnte dir etwas helfen.

Die Datei Ticketautomat.java


```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Ticketautomat {
    private int preis; // preis des einzeltickets
    protected int bisherBezahlt = 0; // wieviel tickets hat man bisher bezahlt
    protected int gesammtkosten = 0; // gesamtkosten der tickets
    protected int anzahlTickets = 0; //anzahl der gekauften tickets
    
    public Ticketautomat(int preis) { // Konstruktor des tickets
        this.preis = preis; // hier wird der preis eines einzelnen tickets gesetzt    
    }
    
    public int getPreis() {
        return this.preis;
    }
    
    public int getBisherBezahlt() {
        return this.bisherBezahlt;
    }
    
    public void setBisherBezahlt(int bezahlt) {
        this.bisherBezahlt = bezahlt;
    }
    
    public void bezahlen(int betrag) {
        setBisherBezahlt(getBisherBezahlt() + betrag);
    }
    
    public int getGesamtkosten() {
        return this.gesammtkosten;
    }
    
    public void setGesamtkosten (int betrag) {
        this.gesammtkosten = betrag;
    } 
    
    public int getAnzahlTickets() {
        return this.anzahlTickets;
    }
    
    public void setAnzahlTickets(int anzahl) {
        this.anzahlTickets = anzahl;
    }
    
    
}

class Tickettest {
    public static void main(String[]args) throws IOException {
        Helper.welcome();
    }
}

class Helper {
    public static void welcome() throws IOException {
        
        // Aufruf des Konstruktors mit einem Ticketpreis von 20 Euro
        Ticketautomat t1 = new Ticketautomat(20);
        
        // Buffered Reader wird benutzt um Strings von der Konsole einzulesen
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        
        System.out.println("+++--- Willkommen ---+++");
        System.out.println("wie viele Tickets möchten Sie erwerben?:");
        
        // setAnzahlTickets erwartet Daten vom Typ Int gegeben sind allerdings Daten vom Typ String
        // deswegen Integer.parseInt dies wandelt sofern es nur eine einfache Zahl ist ein String in einen Integer um
        t1.setAnzahlTickets(Integer.parseInt(in.readLine()));
        
        System.out.println("Sie wollen " + t1.getAnzahlTickets() + " erwerben");
        
        // Multiplikation mit Java bei der Ausgabe 
        System.out.println("Somit wäre ein Gesamtbetrag von " + (t1.getAnzahlTickets() * t1.getPreis()) + " Euro faellig");
        System.out.println("Bitte geben Sie ein, wieviel Euro Sie bezahlen:");
        t1.setBisherBezahlt(Integer.parseInt(in.readLine()));
        System.out.println("Ihnen werden " + (t1.getBisherBezahlt() / t1.getPreis()) + " Tickets ausgehändigt");
    }
    

}
```

PS: Falls du noch Fragen hast, meld dich einfach


----------

