Wie kann ich dieses Zustandsdiagramm am besten Umsetzen?

Salvatore321

Neues Mitglied
Hey ich muss folgendes Zustandsdiagramm umsetzen:


Folgenden Code habe ich bereits für die Wahl des Getränks geschrieben:

import java.util.Scanner;
public class Getraenkeautomat
{
public static void main(String[] args)
{
boolean automatBereit = true;
int Apfelschorle = 01;
int Cola = 11;
int Spezi = 21;
int Wasser = 31;
int gewaehltesGetraenk;
String Getraenk;

Scanner s = new Scanner(System.in);
System.out.println("BESCHREIBUNG:");
System.out.println("Zuerst Getraenkwaehlen:");
System.out.println("Apfelschorle = 01; Cola = 11; Spezi = 21; Wasser = 31");
System.out.println("Dann entsprechenden Betrag mit folgenden Muenzen bezahlen:");
System.out.println("1 = 1€; 0.5 = 50ct; 0.2 = 20ct");
Getraenk = s.next();
gewaehltesGetraenk = Integer.parseInt(Getraenk);


if (gewaehltesGetraenk == Apfelschorle){
System.out.println("gewaehltes Getraenk: Apfelschorle");
System.out.println("Bitte zahlen sie 1.50€");
}
else{
if(gewaehltesGetraenk == Cola){
System.out.println("gewaehltes Getraenk: Cola");
System.out.println("Bitte zahlen sie 2.00€");
}
else{
if(gewaehltesGetraenk == Spezi){
System.out.println("gewaehltes Getraenk: Spezi");
System.out.println("Bitte zahlen sie 1.70€");
}
else{
if(gewaehltesGetraenk == Wasser){
System.out.println("gewaehltes Getraenk: Wasser");
System.out.println("Bitte zahlen sie 1.00€");
}
}
}
}
}
}

Nur habe ich das Problem, dass ich keine Ahnung habe wie ich am besten die Münzeingabe umsetzen soll. Wie ihr evtl schon dem Code entnehmen konntet kann der Anwendern 1Euro, 50ct und 20 ct Münzen einwerfen. Wenn zuviel eingeworfen wird soll entsprechend das Getränk mit Rückgeld ausgegeben werden, wenn zu wenig eingeworfen wird soll der noch zu bezahlende betrag ausgegeben werden. Ich habe es mit einer Do while schleife probiert bin jedoch auf kein schlüssiges ergebnis gekommen weshalb ich euch diese erspare. Könntet ihr mir dazu einen Ansatz bzw Lösungsvorschlag sagen wie ich den Münzeinwurf umsetzen soll?
 

Anhänge

  • 20210205_101033.jpg
    20210205_101033.jpg
    1,2 MB · Aufrufe: 26
Bitter immer in Code-Tags posten.
Java:
import java.util.Scanner;

public class Getraenkeautomat
{
    public static void main(String[] args)
    { 
        boolean automatBereit = true;
        int Apfelschorle = 01;
        int Cola = 11;
        int Spezi = 21;
        int Wasser = 31;
        int gewaehltesGetraenk;
        String Getraenk;

        Scanner s = new Scanner(System.in);
        System.out.println("BESCHREIBUNG:");
        System.out.println("Zuerst Getraenkwaehlen:");
        System.out.println("Apfelschorle = 01; Cola = 11; Spezi = 21; Wasser = 31");
        System.out.println("Dann entsprechenden Betrag mit folgenden Muenzen bezahlen:");
        System.out.println("1 = 1€; 0.5 = 50ct; 0.2 = 20ct");
        Getraenk = s.next();
        gewaehltesGetraenk = Integer.parseInt(Getraenk);

        if (gewaehltesGetraenk == Apfelschorle){
            System.out.println("gewaehltes Getraenk: Apfelschorle");
            System.out.println("Bitte zahlen sie 1.50€");
        }
        else{
            if(gewaehltesGetraenk == Cola){
                System.out.println("gewaehltes Getraenk: Cola");
                System.out.println("Bitte zahlen sie 2.00€");
            }
            else{
                if(gewaehltesGetraenk == Spezi){
                    System.out.println("gewaehltes Getraenk: Spezi");
                    System.out.println("Bitte zahlen sie 1.70€");
                }
                else{
                     if(gewaehltesGetraenk == Wasser){
                         System.out.println("gewaehltes Getraenk: Wasser");
                         System.out.println("Bitte zahlen sie 1.00€");
                    }
                }
            }
        }
    }
}
 
Bitter immer in Code-Tags posten.
Java:
import java.util.Scanner;
public class Getraenkeautomat
{
public static void main(String[] args)
{
boolean automatBereit = true;
int Apfelschorle = 01;
int Cola = 11;
int Spezi = 21;
int Wasser = 31;
int gewaehltesGetraenk;
String Getraenk;

Scanner s = new Scanner(System.in);
System.out.println("BESCHREIBUNG:");
System.out.println("Zuerst Getraenkwaehlen:");
System.out.println("Apfelschorle = 01; Cola = 11; Spezi = 21; Wasser = 31");
System.out.println("Dann entsprechenden Betrag mit folgenden Muenzen bezahlen:");
System.out.println("1 = 1€; 0.5 = 50ct; 0.2 = 20ct");
Getraenk = s.next();
gewaehltesGetraenk = Integer.parseInt(Getraenk);


if (gewaehltesGetraenk == Apfelschorle){
System.out.println("gewaehltes Getraenk: Apfelschorle");
System.out.println("Bitte zahlen sie 1.50€");
}
else{
if(gewaehltesGetraenk == Cola){
System.out.println("gewaehltes Getraenk: Cola");
System.out.println("Bitte zahlen sie 2.00€");
}
else{
if(gewaehltesGetraenk == Spezi){
System.out.println("gewaehltes Getraenk: Spezi");
System.out.println("Bitte zahlen sie 1.70€");
}
else{
if(gewaehltesGetraenk == Wasser){
System.out.println("gewaehltes Getraenk: Wasser");
System.out.println("Bitte zahlen sie 1.00€");
}
}
}
}
}
}
ou entschuldigung ich werde in zukunft darauf achten👍
 
Der Automat bietet ja verschiedene Eingabemöglichkeiten. Einmal Knöpfe/Tastatureingaben für die Getränkewahl und einmal Eingaben in Form von Münzen. Diese musst Du voneinander unterscheiden können. Dazu kannst Du z. B. einen Präfix verwenden: M für Münze und G für Getränke. M100, M50 und M20 könnten Münzeinwürfe in Cent darstellen, während Gxx die Wahl des Getränks Nr. xx wäre.
 
Anstatt else und dann if kannst du auch einfach "else if" schreiben. Dann hast du weniger tiefe Einrückungen.
Java:
if (gewaehltesGetraenk == Apfelschorle){
    System.out.println("gewaehltes Getraenk: Apfelschorle");
    System.out.println("Bitte zahlen sie 1.50€");
}
else if(gewaehltesGetraenk == Cola){
    System.out.println("gewaehltes Getraenk: Cola");
    System.out.println("Bitte zahlen sie 2.00€");
}
else if(gewaehltesGetraenk == Spezi){
    System.out.println("gewaehltes Getraenk: Spezi");
    System.out.println("Bitte zahlen sie 1.70€");
}
else if(gewaehltesGetraenk == Wasser){
    System.out.println("gewaehltes Getraenk: Wasser");
    System.out.println("Bitte zahlen sie 1.00€");
}
 
Nicht vergessen: Du schreibst
Java:
int Apfelschorle = 01;
Das wird zu 1.
In deinem Programm ist das aber kein Problem, da Integer.parseInt("01"); ebenfalls 1 ist.

Generell solltest du dir aber abgewöhnen, eine 0 vorne hinzuschreiben. Folgende Zeile ist z.B. gar nicht möglich.
Java:
int Apfelschorle = 08;
Das Programm würde gar nicht kompilieren ("The literal 08 of type int is out of range ").
 

Zurück
Oben