Kaffemaschine Programmierung Probleme

Dieses Thema Kaffemaschine Programmierung Probleme im Forum "Allgemeine Java-Themen" wurde erstellt von Schlotti, 5. Jan. 2017.

Thema: Kaffemaschine Programmierung Probleme Hallo Leute, ich hab einen kleinen Hänger und komm nicht mehr weiter. Wenn ich folgenden Code laufen lasse bekomm...

  1. Hallo Leute,
    ich hab einen kleinen Hänger und komm nicht mehr weiter. Wenn ich folgenden Code laufen lasse bekomm ich das Problem, dass es trotz Abbrechen weiter Geld annimmt. Ich hatte das Programm schonmal am laufen muss es aber umändern, da es zu lang war.
    Ich sehe für mich das Problem besonders in der Steuereinheit und meiner Abbruch Taste. Ich möchte nach den cases die Möglichkeit geben abzubrechen.
    Wie schaffe ich es das mein Programm wieder zum Anfang springt und nicht das komplette Programm abbricht sonder neu die Tastatur ausgibt?
    Vielen Dank schon mal im vor raus :)
    Ich hoffe durch meine Versuche ist es nicht ganz außer rand und band geraten :-D


    Code (Java):
    public class Steuereinheit2
    {
        private static int preisKaffeeSchwarz = 100;
        private static int preisKaffeeMilch = 150;
        private static int preisKaffeeZucker = 150;
        private static int preisKaffeeMilchZucker = 200;
        private static int a;
        static Muenzwerk2 m = new Muenzwerk2();

        public static void main(String[] args)
        {
            Tastatur2 t = new Tastatur2();//Objekte erzeugen
            Display2 d = new Display2();

            Depot2 d1 = new Depot2(5,5,5,2,2);

            do{
                m.anzahlPruefen();//Münzprüfung
                d.textAnzeigen();
                switch(t.tasteAbfragen())//Beginn Kaffeeabfrage
                {

                default:
                    IO.writeln("Fehler!");
                    break;
                case 1:
                    m.setKaffeepreis(preisKaffeeSchwarz);
                    a = m.getKaffeepreis();                        //Preis wird festgelegt
                    if(d1.wasserPruefen() == true && d1.becherPruefen() == true && d1.kaffeePruefen() == true)  //Depotprüfung
                    {
                        IO.writeln("Sie haben gewählt: Kaffee schwarz \n"+ "Der Kaffee kostet " + preisKaffeeSchwarz + " Cent"); //Anzeige Auswahl
                    }
                    else
                    {
                        IO.writeln("Bitte Fehler beheben!");
                    }
                    break;

                case 2:
                    m.setKaffeepreis(preisKaffeeMilch);
                    if(d1.wasserPruefen() == true && d1.becherPruefen() == true && d1.kaffeePruefen() == true && d1.milchPruefen() == true) /*Kaffee schwarz*/
                    {
                        IO.writeln("Sie haben gewählt: Kaffee mit Milch\n"+ "Der Kaffee kostet " + preisKaffeeMilch + " Cent");
                    }
                    else
                    {
                        IO.writeln("Bitte Fehler beheben!");
                    }
                    break;

                case 3:
                    m.setKaffeepreis(preisKaffeeZucker);
                    if(d1.wasserPruefen() == true && d1.becherPruefen() == true && d1.kaffeePruefen() == true && d1.zuckerPruefen() == true)    /*Kaffee schwarz*/
                    {
                        IO.writeln("Sie haben gew�hlt: Kaffee mit Zucker\n"+ "Der Kaffee kostet " + preisKaffeeZucker + " Cent");
                    }
                    else
                    {
                        IO.writeln("Bitte Fehler beheben!");
                    }
                    break;

                case 4:
                    m.setKaffeepreis(preisKaffeeMilchZucker);
                    if(d1.wasserPruefen() == true && d1.becherPruefen() == true && d1.kaffeePruefen() == true && d1.milchPruefen() == true) /*Kaffee schwarz*/
                    {
                        IO.writeln("Sie haben gew�hlt: Kaffee mit Milch und Zucker\n"+ "Der Kaffee kostet " + preisKaffeeMilchZucker + " Cent");
                    }
                    else
                    {
                        IO.writeln("Bitte Fehler beheben!");
                    }

                    break;

                case 6:    //Service cases
                    d1.allesAuffuellenaufMAX();
                    IO.writeln("Depots wurden aufgef�llt");
                    break;

                case 7:
                    m.muenzenAuffuellenMAX();
                    IO.writeln("M�nzen wurden aufgef�llt");
                    break;
                case 8:
                    m.muenzenAuffuellenMAX();
                    d1.allesAuffuellenaufMAX();
                    IO.writeln("M�nzen und Depots wurden aufgef�llt");
                    break;
                }

                d.textAbbrechen();
                t.tasteAbbruch();
                if (t.tasteAbbruch() == false)
                {
                    break;
                }
                else
                {
     

                do
                {
                    berechneRestbetrag(m.getKaffeepreis(), m.muenzenEinzahlen(IO.promptAndReadInt("Bitte Münze einwerfen: ")));  //Münzen einwerfen
                    if (a == 0) //Passend gezahlt
                    {
                        IO.writeln("Vielen Dank!\nBitte Kaffee entnehmen!");
                    }

                    else if (a < 0)     // Rückgeld
                    {
                        do
                        {
                            m.setKaffeepreis(a *(-1));

                            if(a >= 100 && m.getAnzahl100ct()>0)    ////Test ob wir R�ckgeld ausgeben k�nnen!
                            {
                                m.setKaffeepreis(a-100);
                            }
                            else if (a >= 50 && m.getAnzahl50ct()>0)
                            {
                                m.setKaffeepreis(a-50);
                            }
                            else if (a >= 20 && m.getAnzahl20ct()>0)
                            {
                                m.setKaffeepreis(a-20);
                            }
                            else if (a >= 10 && m.getAnzahl10ct()>0)
                            {
                                m.setKaffeepreis(a-10);
                            }
                            else if (a>= 10 && m.getAnzahl10ct() == 0)
                            {
                                int b = m.getKaffeepreis() - a*(-1);

                                if(b >= 100 && m.getAnzahl100ct()>0)        //Zuerst "gro�e" M�nzen
                                {
                                    m.muenzenAuszahlen(100);
                                    m.setKaffeepreis(b-100);
                                    IO.writeln("100 Cent");
                                }
                                else if (b >= 50 && m.getAnzahl50ct()>0)
                                {
                                    m.muenzenAuszahlen(50);
                                    m.setKaffeepreis(b-50);
                                    IO.writeln("50 Cent");
                                }
                                else if (b >= 20 && m.getAnzahl20ct()>0)
                                {
                                    m.muenzenAuszahlen(20);
                                    m.setKaffeepreis(b-20);
                                    IO.writeln("20 Cent");
                                }
                                else if (b >= 10 && m.getAnzahl10ct()>0)
                                {
                                    m.muenzenAuszahlen(10);
                                    m.setKaffeepreis(b-10);
                                    IO.writeln("10 Cent");
                                }

                                a = 0;
                            }
                        } while (a > 0);


                        do
                        {
                            m.setKaffeepreis(a *(-1));

                            if(a >= 100 && m.getAnzahl100ct()>0)    ////Zuerst "große" Münzen
                            {
                                m.muenzenAuszahlen(100);
                                m.setKaffeepreis(a-100);
                                IO.writeln("100 Cent");
                            }
                            else if (a >= 50 && m.getAnzahl50ct()>0)
                            {
                                m.muenzenAuszahlen(50);
                                m.setKaffeepreis(a-50);
                                IO.writeln("50 Cent");
                            }
                            else if (a >= 20 && m.getAnzahl20ct()>0)
                            {
                                m.muenzenAuszahlen(20);
                                m.setKaffeepreis(a-20);
                                IO.writeln("20 Cent");
                            }
                            else if (a >= 10 && m.getAnzahl10ct()>0)
                            {
                                m.muenzenAuszahlen(10);
                                m.setKaffeepreis(a-10);
                                IO.writeln("10 Cent");
                            }
                        } while (a > 0);

                     
                        IO.writeln("Vielen Dank!\nBitte Kaffee entnehmen!");

                    }

                    else
                    {
                        d.textAbbrechen();
                    }
                    if (t.tasteAbbruch()==false)        //Geldausgabe bei Abbruch
                    {
                        int b = m.getKaffeepreis() - a;

                            if(b >= 100 && m.getAnzahl100ct()>0)        //Zuerst "gro�e" M�nzen
                            {
                                m.muenzenAuszahlen(100);
                                m.setKaffeepreis(b-100);
                                IO.writeln("100 Cent");
                            }
                            else if (b >= 50 && m.getAnzahl50ct()>0)
                            {
                                m.muenzenAuszahlen(50);
                                m.setKaffeepreis(b-50);
                                IO.writeln("50 Cent");
                            }
                            else if (b >= 20 && m.getAnzahl20ct()>0)
                            {
                                m.muenzenAuszahlen(20);
                                m.setKaffeepreis(b-20);
                                IO.writeln("20 Cent");
                            }
                            else if (b >= 10 && m.getAnzahl10ct()>0)
                            {
                                m.muenzenAuszahlen(10);
                                m.setKaffeepreis(b-10);
                                IO.writeln("10 Cent");
                            }

                            break;

                    }
                }
                   while (a > 0 );  
                                       //Ende Geldeingabe TODO test ob geklappt
                d.textAbbrechen();

                }
            }while(t.tasteAbbruch());

     
     
        }


        public static int berechneRestbetrag(int preis, int muenze)
        {
                m.setKaffeepreis(preis);

               if (muenze == 10 || muenze == 20 || muenze == 50 || muenze == 100 || muenze == 200)
                {   a = a - muenze;
                    if (a > 0)
                    {
                        IO.writeln("Restbetrag: " + a);
                    }
                    else
                    {
                        IO.writeln("R�ckgeld: " + a *(-1));
                    }
                }

                else
                {
                    IO.writeln("M�nze gibt es nicht!");
                }

                return a;
        }
    }
    Code (Text):
    public class Tastatur2
    {
        public int tasteAbfragen()                            //Abfrage der Taste
        {
            int x = IO.promptAndReadInt("");                //Text daf�r steht nachher in Class Display, nicht in Class Tastatur!
            return x;
        }

        public boolean tasteAbbruch()                        // Abbrechen
        {
            boolean b;
            String x = IO.promptAndReadString("");            //Text daf�r steht nachher in Class Display, nicht in Class Tastatur! "F�r abbrechen 'j' eingeben!"
            if (x.equals("j"))
            {
                b = false;
                return b;
            }
            else
            {
                b = true;
                return b;
            }
        }

        public Tastatur2()
        {

        }
    }
     
    Code (Text):
    public class Display2
    {
        public void textAnzeigen()
        {
            IO.writeln("Dr�cken Sie 1 f�r einen Kaffee!");            // Option 1
            IO.writeln("Dr�cken Sie 2 f�r einen Kaffee mit Milch!");        // Option 2
            IO.writeln("Dr�cken Sie 3 f�r einen Kaffee mit Zucker!");                // Option 3
            IO.writeln("Dr�cken Sie 4 f�r einen Kaffee mit Milch und Zucker!");                // Option 4
        }

        public void textAbbrechen()
        {
            IO.writeln("F�r abbrechen 'j' eingeben!");
        }

        public Display2()
        {

        }
    }
     
    Code (Text):
    public class Depot2 {

        //Attribut
        private int
        becherEinheiten = 0,    //Anzahl der im Depot befindlichen Becher
        kaffeeEinheiten = 0,    //Menge des im Depot befindlichen Kaffees
        wasserEinheiten = 0,    //Menge des im Depot befindlichen Wassers
        zuckerEinheiten = 0,    //Menge des im Depot befindlichen Zuckers
        milchEinheiten = 0;     //Menge der im Depot befindlichen Milch

        //Maximale Mengen
        final int MAX_BECHER = 21;
        final int MAX_KAFFEE = 19;
        final int MAX_WASSER = 11;
        final int MAX_ZUCKER =  5;
        final int MAX_MILCH  =  3;

        public String toString()
        {
            return    "Becher: " + becherEinheiten + "\n" +
                    "Kaffee: " + kaffeeEinheiten + "\n" +
                    "Wasser: " + wasserEinheiten + "\n" +
                    "Zucker: " + zuckerEinheiten + "\n" +
                    "Milch: "  + milchEinheiten;
        }

        // Methode zur Entnahme
     
     
        public boolean entnahmeKaffeschwarz ()
        {
            if(becherEinheiten > 0 && wasserEinheiten > 0 && kaffeeEinheiten > 0)
            {
                becherEinheiten = becherEinheiten - 1;
                wasserEinheiten = wasserEinheiten - 1;
                kaffeeEinheiten = kaffeeEinheiten - 1;
                return true;
            }
            else
            {
                System.out.println("Fehler, nicht genügend Zutaten vorhanden. Bitte auff�llen!");
                return false;
            }
         
        }
     
        public boolean entnahmeKaffeeMitZucker ()
        {
            if(becherEinheiten > 0 && wasserEinheiten > 0 && kaffeeEinheiten > 0 && zuckerEinheiten > 0)
            {
                becherEinheiten = becherEinheiten - 1;
                wasserEinheiten = wasserEinheiten - 1;
                kaffeeEinheiten = kaffeeEinheiten - 1;
                zuckerEinheiten = zuckerEinheiten - 1;
                return true;
            }
            else
            {
                System.out.println("Fehler, nicht genügend Zutaten vorhanden. Bitte auff�llen!");
                return false;
            }
        }
     
        public boolean entnahmeKaffeeMitMilch ()
        {
            if(becherEinheiten > 0 && wasserEinheiten > 0 && kaffeeEinheiten > 0 && milchEinheiten > 0)
            {
                becherEinheiten = becherEinheiten - 1;
                wasserEinheiten = wasserEinheiten - 1;
                kaffeeEinheiten = kaffeeEinheiten - 1;
                milchEinheiten = milchEinheiten - 1;
                return true;
            }
            else
            {
                System.out.println("Fehler, nicht genügend Zutaten vorhanden. Bitte auff�llen!");
                return false;
            }
         
        }
        public boolean entnahmeKaffeeMitMilchUndZucker ()
        {
            if(becherEinheiten > 0 && wasserEinheiten > 0 && kaffeeEinheiten > 0 && milchEinheiten > 0 && zuckerEinheiten > 0)
            {
                becherEinheiten = becherEinheiten - 1;
                wasserEinheiten = wasserEinheiten - 1;
                kaffeeEinheiten = kaffeeEinheiten - 1;
                milchEinheiten = milchEinheiten - 1;
                zuckerEinheiten = zuckerEinheiten - 1;
                return true;
            }
            else
            {
                System.out.println("Fehler, nicht genügend Zutaten vorhanden. Bitte auff�llen!");
                return false;
            }
         
        }

      /*
        public boolean entnehmeBecher ()
        {
            if(becherEinheiten > 0)
            {
                becherEinheiten = becherEinheiten - 1;
                return true;
            }
            else
            {
                System.out.println("Fehler, Becher sind leer. Bitte auff�llen!");
                return false;
            }
        }


        public boolean entnehmeKaffee (int anzahl)
        {
            if(kaffeeEinheiten >= anzahl)
            {
                kaffeeEinheiten = kaffeeEinheiten - anzahl;
                return true;
            }
            else
            {
                System.out.println("Fehler, Kaffee ist leer. Bitte auff�llen!");
                return false;
            }
        }

        public boolean entnehmeWasser ()
        {
            if(wasserEinheiten > 0)
            {
                wasserEinheiten = wasserEinheiten - 1;
                return true;
            }
            else
            {
                System.out.println("Fehler, Wasser ist leer. Bitte auff�llen!");

                return false;
            }
        }

        public boolean entnehmeZucker (int anzahl)
        {
            if(zuckerEinheiten >= anzahl)
            {
                zuckerEinheiten = zuckerEinheiten - anzahl;
                return true;
            }
            else
            {
                System.out.println("Fehler, Zucker ist leer. Bitte auff�llen!");
                return false;
            }
        }

        public boolean entnehmeMilch (int anzahl)
        {
            if(milchEinheiten >= anzahl)
            {
                milchEinheiten = milchEinheiten - anzahl;
                return true;
            }
            else
            {
                System.out.println("Fehler, Milch ist leer. Bitte auff�llen!");
                return false;
            }
        }
    */
        //Methode zum Auff�llen
        public void becherAuffuellenaufMAX ()
        {
            becherEinheiten = MAX_BECHER;
        }

        public void kaffeeAuffuellenaufMAX ()
        {
            kaffeeEinheiten = MAX_KAFFEE;
        }

        public void wasserAuffuellenaufMAX ()
        {
            wasserEinheiten = MAX_WASSER;
        }

        public void zuckerAuffuellenaufMAX ()
        {
            zuckerEinheiten = MAX_ZUCKER;
        }

        public void milchAuffuellenaufMAX ()
        {
            milchEinheiten = MAX_MILCH;
        }

        public void allesAuffuellenaufMAX ()        //Alles auff�llen
        {
            becherAuffuellenaufMAX ();
            kaffeeAuffuellenaufMAX ();
            wasserAuffuellenaufMAX ();
            zuckerAuffuellenaufMAX ();
            milchAuffuellenaufMAX ();
        }

        //Getters
        int getBecher()
        {
             return becherEinheiten;
        }

        int getKaffee()
        {
             return kaffeeEinheiten;
        }

        int getWasser()
        {
             return wasserEinheiten;
        }

        int getZucker()
        {
             return zuckerEinheiten;
        }

        int getMilch()
        {
             return milchEinheiten;
        }

        // Methoden zum Pr�fen
        public boolean wasserPruefen()
        {
            if (wasserEinheiten == 0)
            {
                IO.writeln("Wasserdepot leer, bitte auff�llen!");
                return false;
            }
            else
            {
                return true;
            }
        }

        public boolean becherPruefen()
        {
            if (becherEinheiten == 0)
            {
                IO.writeln("Becherdepot leer, bitte auff�llen!");
                return false;
            }
            else
            {
                return true;
            }
        }

        public boolean kaffeePruefen()
        {
            if (kaffeeEinheiten == 0)
            {
                IO.writeln("Kaffeedepot leer, bitte auff�llen!");
                return false;
            }
            else
            {
                return true;
            }
        }

        public boolean zuckerPruefen()
        {
            if (zuckerEinheiten == 0)
            {
                IO.writeln("Zuckerdepot leer, bitte auff�llen!");
                return false;
            }
            else
            {
                return true;
            }
        }

        public boolean milchPruefen()
        {
            if (milchEinheiten == 0)
            {
                IO.writeln("Milchdepot leer, bitte auff�llen!");
                return false;
            }
            else
            {
                return true;
            }
        }

        public Depot2(int w, int k, int b, int z, int m)
        {
            wasserEinheiten=w;
            kaffeeEinheiten=k;
            becherEinheiten=b;
            zuckerEinheiten=z;
            milchEinheiten=m;
        }
    }
    Code (Text):
    public class Muenzwerk2 {

        //Klassen-Variablen Initialisierung

        public static int eingezahlteMuenzen;


        //Instanz-Variablen Initialisierung
        private int anzahl10ct = 5;
        private int anzahl20ct = 5;
        private int anzahl50ct = 5;
        private int anzahl100ct = 5;
        private int anzahl200ct;
        private int kaffeepreis;
        private int muenze;
        private int eingewMuenzen;

        public int getEingewMuenzen() {
            return eingewMuenzen;
        }


        public void setEingewMuenzen(int eingewMuenzen) {
            this.eingewMuenzen = eingewMuenzen;
        }


        //Konstruktor
        public Muenzwerk2()
        {

        }


        //getter
        public int getAnzahl10ct()
        {
            return anzahl10ct;
        }
        public int getAnzahl20ct()
        {
            return anzahl20ct;
        }
        public int getAnzahl50ct()
        {
            return anzahl50ct;
        }
        public int getAnzahl100ct()
        {
            return anzahl100ct;
        }
        public int getAnzahl200ct()
        {
            return anzahl200ct;
        }


        //Methoden
        // TODO KEIN WIRKLICHER TEST
        public boolean anzahlPruefen(){
            if (anzahl10ct>=1 && anzahl20ct>=1 && anzahl50ct>=1 && anzahl100ct>=1)
            { return true;}
            else
            {
                IO.writeln("Bitte passend Zahlen. Kein Rückgeld möglich");
                return false;
            }
        }

        public int muenzenEinzahlen(int muenzart)
        {
            if(muenzenPruefen() == false)
            {
                muenzart = 999;
            }

            switch(muenzart)
            {


            case 10:
                if(muenzart == 10)
                {
                    anzahl10ct ++;
                    eingezahlteMuenzen ++;
                    eingewMuenzen=eingewMuenzen+10;
                    break;
                }
            case 20:

                if(muenzart == 20)
                {
                    anzahl20ct ++;
                    eingezahlteMuenzen ++;
                    eingewMuenzen=eingewMuenzen+20;
                    break;

                }
            case 50:
                if(muenzart == 50)
                {
                    anzahl50ct ++;
                    eingezahlteMuenzen ++;
                    eingewMuenzen=eingewMuenzen+50;
                    break;
                }
            case 100:
                if(muenzart == 100)
                {
                    anzahl100ct ++;
                    eingezahlteMuenzen ++;
                    eingewMuenzen=eingewMuenzen+100;
                    break;
                }
            case 200:
                if(muenzart == 200)
                {
                    anzahl200ct ++;
                    eingezahlteMuenzen ++;
                    eingewMuenzen=eingewMuenzen+200;
                    break;
                }
            default:
                {
                    System.out.println("Es werden nur 10 Cent, 20 Cent, 50 Cent, 1 Euro oder 2Euro Stücke angenommen!");

                }
            }
            muenze = muenzart;
            return muenze;
        }


        public void muenzenAuszahlen(int muenzart)
        {
            switch(muenzart){

                case 10:
                    if(muenzart == 10)
                    {
                        if(anzahl10ct > 0)
                        {
                            anzahl10ct --;
                        }
                        else
                        {
                            IO.writeln("Münzen auffüllen!");
                        }
                        break;
                    }
                case 20:
                    if(muenzart == 20)
                    {
                        if(anzahl20ct > 0)
                        {
                            anzahl20ct --;
                        }
                        else
                        {
                            IO.writeln("Münzen auffüllen!");
                        }
                        break;
                    }
                case 50:
                    if(muenzart == 50)
                    {
                        if(anzahl50ct > 0)
                        {
                            anzahl20ct --;
                        }
                        else
                        {
                            IO.writeln("Münzen auffüllen!");
                        }
                        break;
                    }
                case 100:
                    if(muenzart == 100)
                    {
                        if(anzahl100ct > 0)
                        {
                            anzahl100ct --;
                        }
                        else
                        {
                            IO.writeln("Münzen auffüllen!");
                        }
                    break;

                    }
                case 200:
                    if(muenzart == 200)
                    {
                        if(anzahl200ct > 0)
                        {
                            anzahl200ct --;
                        }
                        else
                        {
                            IO.writeln("Münzen auffüllen!");
                        }
                        break;

                    }
                default:
                {
                    System.out.println("Es werden nur 10 Cent, 20 Cent, 50 Cent, 1 Euro oder 2Euro Stücke angenommen!");

                }
            }
        }

        public void muenzenAuffuellenMAX()
        {
            anzahl10ct = 7;
            anzahl20ct = 7;
            anzahl50ct = 7;
            anzahl100ct = 7;
        }

        public boolean muenzenPruefen()
        {
            if(eingezahlteMuenzen == 10)
            {
                System.out.println("Münze nicht erkannt");
                eingezahlteMuenzen=0;
                return false;
            }
            else
            {
                return true;
            }
        }

        public int getKaffeepreis() {
            return kaffeepreis;
        }

        public void setKaffeepreis(int kaffeepreis) {
            this.kaffeepreis = kaffeepreis;
        }

    }
     
    Zuletzt bearbeitet: 5. Jan. 2017
  2. Vielleicht helfen dir diese Java-Grundlagen weiter --> *Klick*
  3. Leider kann ich meinen Post nicht löschen. Hab das Problem lokalisiert und so einigermaßen gelöst.
     
    Zuletzt bearbeitet: 5. Jan. 2017
  4. @Schlotti du kannst ja statt den Beitrag zu löschen deine Lösung hier posten, damit Leute mit dem gleichen Problem ein Beispiel haben ;)
     
    sengul und VfL_Freak gefällt das.
  5. KOSTENLOSES Java-Grundlagen Training im Wert von 39 € Sichere dir hier den kostenlosen Zugriff auf umfangreiches Java-Know How und starte richtig durch!