Methode um mögliche Rezepte auszugeben

DoMa96

Mitglied
Hallo zusammen,

ich soll eine Methode schreiben, mit der ich anhand der zuvor eingegeben Daten mögliche Rezepte ausgeben lassen soll. Ich stehe allerdings noch total auf dem Schlauch und wäre froh über ein paar Hinweise zum weiteren Vorgehen.

Es sollen mögliche Rezepte auf Grundlage des Vorrates an Zutaten und der benötigten Menge der Zutaten, die in den Rezepten festgehalten sind ausgegeben werden.
Es gibt ein Array Rezepte recipes[10] befüllt mit name, beschreibung und zutaten[](bestehend aus menge und zutatTyp s.u.)
Ein array Zutat vorrat[25], dort sind ZutatTyp und Menge vermerkt
Es gibt außerdem noch ein array zutatTypen[25] in dem generell Zuttattypen erfasst werden können mit Beschreibung, Namen und Mengeneinheit(NICHT der Anzahl an Menge, die soll in vorrat[] erfasst werden, allerdings glaube ich nicht, dass ich dieses brauche, da alle relevanten Information in recipes[] und zutaten[], sowie vorrat[] ( Benötigte Zutaten + Menge eines ZutatTyps für ein Rezept und abgleichend die Menge des ZutatTyps im Vorrat. Theoretisch weiß ich wohin ungefähr, allerdings habe ich keine Ahnung wie! Wäre wie gesagt auch für schubser in die richtige Richtung dankbar.
Hier noch kurz etwas code zur verdeutlich der Klassen und Objektlage:
[CODE lang="java" title="Main"] public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

ZutatTyp zutatTypen[] = new ZutatTyp[25];
Rezepte recipes[] = new Rezepte[10];
Zutat vorrat[] = new Zutat[25];

verarbeiteAuswahl(sc, zutatTypen, recipes, vorrat);

}[/CODE]
[CODE lang="java" title="Klasse ZutatTyp"]public class ZutatTyp {
private String name;
private String beschreibung;
private String mengenEinheit;

public ZutatTyp(String name, String beschreibung, String mengenEinheit) {
this.name = name;
this.beschreibung = beschreibung;
this.mengenEinheit = mengenEinheit;
}
public ZutatTyp(String name, String mengenEinheit) {
this.name = name;
this.mengenEinheit = mengenEinheit;
}
public ZutatTyp() {

}[/CODE]

[CODE lang="java" title="Klasse Rezepte"]public class Rezepte {

Zutat[] zutaten = new Zutat[10];

private String name;
private String beschreibung;
[/CODE]

[CODE lang="java" title="Klasse Zutat"]
public class Zutat {

private ZutatTyp zutatTyp;
private int menge;

public Zutat() {

}[/CODE]
 
Moin, das hat in diesem Falle nichts mit der Vererbung zu tun soweit ich weiß, es soll nur abgeglichen werden, ob ein Rezept erstellt werden kann aufgrund der Vorratslage
 
du hast deine Klasse VorratsManager zb ... oder versteh ich die aufgabe hinten und vorne falsch?
Java:
interface Zutat{
    
}
class Stein implements Zutat{}
class MieseBriese implements Zutat{}
public class VorratsManager{
    
        
    public Zutat gibMirZutat(String name){
        if ( name.equals("Stein")){
            if( SteinVorrat <= 0 ){
                return null; // gibt keine mehr :(
            }
            else {
                SteinVorrat -= 1;
                return new Stein(); // wenn du hier bist gibts noch steine als zutat
            }
        }
    }
    
}
in deiner main hast du zb
Java:
main...
{
    VorratsManager manager = new VorratsManager(10,1000,40); // die zahlen sind zb die "vorräte für die zutaten"
    Rezept rezept = new Rezept();
    Stein stein = manager.gibMirZutat("Stein");
    
    if( stein != null ) // wenn du null zurück bekommst is der Vorrat leer!
    {
        rezept.fugZutatHinzu(stein);
    }
    
}
 
ich weiß nicht ob ich gar nicht verstehe, was du damit meinst, oder wir einfach aneinandervorbeireden, aber ich bin gerade an der Aufgabe [6] des Projekts.
Hier zum Verständnis einmal die Aufgabenstellung:
/*  Menü: Die Anwendung soll beim Start ein Menü anzeigen, dass die folgenden Ein- träge enthält:

1. ZutatTyp anlegen

2. ZutatTypen anzeigen

3. Rezept anlegen und zur Rezeptsammlung hinzufügen

4. Rezeptsammlung anzeigen

5. Zutat zum Vorrat hinzufügen

6. Rezeptvorschlag

7. Programm beenden

Durch die Eingabe der jeweiligen Nummer startet, dann die jeweilige Funktionalität. Zum Beispiel durch Eingabe der [1] kann eine neue Zutat angelegt werden. Nach der

Beendigung der aufgerufenen Funktionalität, wird das Menü wieder angezeigt.

 [1] ZutatTyp anlegen: Eine ZutatTyp hat einen Namen (z.B. Spaghetti oder Milch), eine Beschreibung (z.B. 9 Minuten Kochzeit oder 1,5% Fett) und eine Mengeneinheit (z.B. Gramm, Milliliter oder Stück). Beim Anlegen eines ZutatTyps soll die/der Benut- zer:in aufgefordert werden einen Namen und eine optionale Beschreibung einzuge- ben und muss die Mengeneinheit angeben. Vor dem Speichern des ZutatTyps über- prüfen Sie bitte, ob es bereits einen ZutatTyp mit demselben Namen gibt. Wenn dies der Fall ist, soll der ZutatTyp nicht angelegt werden.

Bitte beachten:

(1) Die konkrete Menge der Zutat (z.B. 300 Gramm) gehört nicht zur Klasse ZutatTyp, da die Zutaten ja in unterschiedlichen Mengen in den Rezepten benötigt werden bzw. in unterschiedlichen Mengen vorrätig sind.

(2) Obwohl Sie später das Anlegen von unbegrenzt vielen ZutatTypen unterstützen wollen, werden in der ersten Version Ihrer „Was koche ich heute“ Anwendung nur 25 ZutatTypen unterstützt. Speichern Sie die ZutatTypen dazu in einem Array mit 25 Fel- dern, das Sie in der main-Methode Ihrer Anwendung anlegen.

 [2] ZutatTypen anzeigen: Es sollen alle angelegten ZutatTypen durchnummeriert in der Form <fortlaufende Nummer>. <Name des ZutatTyps>, <Beschreibung>, <Men- geneinheit> angezeigt werden. Beispiel:

ZutatTypen:

==========

1. Spaghetti, neun Minuten Kochzeit, Gramm 2. Milch, 1,5% Fett, Milliliter

3. Tomaten, Gramm

...

 [3] Rezept anlegen: Ein Rezept hat einen Namen, eine Beschreibung und besteht aus mehreren Zutaten. Beim Anlegen eines Rezeptes soll die/der Benutzer:in aufgefor- dert werden einen Rezeptnamen und eine Beschreibung einzugeben.

Anschließend können dann bis zu zehn Zutaten hinzugefügt werden. Dazu werden alle bereits angelegten ZutatTypen mit einer vorangestellten Nummer (beginnend mit 1) angezeigt. Die Auswahl eines ZutatTyps erfolgt durch Eingabe dieser Nummer. Die Eingabe der Zahl 0 beendet das Hinzufügen von Zutaten. Nach jedem hinzugefüg- ten ZutatTyp muss die/der Benutzer:in angeben in welcher Menge der ZutatTyp im Rezept benötigt wird (z.B. hinzugefügter ZutatTyp Spaghetti, 300 Gramm).

Bitte beachten:

(1) Für das Speichern der Menge einer Zutat und des ausgewählten ZutatTyps selbst, benutzen Sie bitte ein Objekt der Klasse Zutat. Die Klasse Zutat hat Objektvariablen

für die Menge und den ZutatTyp. Die Klasse Rezept selbst hat wiederum ein Array na- mens „zutaten“ mit zehn Feldern, um die Zutatobjekte (jeweils Menge und ZutatTyp) zu speichern.

(2) Obwohl Sie später das Anlegen von unbegrenzt vielen Rezepten unterstützen wol- len, werden in der ersten Version Ihrer „Was koche ich heute“ Anwendung nur zehn Rezepte unterstützt. Speichern Sie die Rezepte dazu in einem Array mit zehn Feldern, das Sie in der main-Methode Ihrer Anwendung anlegen. Dieses Array ist Ihre Rezept- sammlung.

 [4] Rezept anzeigen: Wird dieser Menüpunkt ausgewählt, soll zunächst ein Überblick über die Rezepte in Ihrer Sammlung in Form einer durchnummerierten Liste ange- zeigt werden:

Meine Rezeptsammlung:
====================
1. Spaghetti Carbonara
2. Grünkohl mit Kohlwurst
3. Milchreis

...

Anschließend kann die/der Benutzer:in ein Rezept durch Eingabe der jeweiligen Nummer auswählen, dass dann detailliert angezeigt wird. Bei Eingabe der „0“ wird wieder das Menü angezeigt.

Die Detailansicht des Rezeptes soll den Namen des Rezeptes, die Beschreibung und auch die Zutaten mit Mengenangaben umfassen.

 [5] Zutat zum Vorrat hinzufügen: Mit dieser Funktionalität können Sie angeben, wel- che Zutaten in welchen Mengen Sie vorrätig haben. D.h. analog zum Hinzufügen von Zutaten zu einem Rezept, können hier bis zu 25 Zutaten zu Ihrem Vorrat hinzugefügt werden. Dazu werden alle bereits angelegten ZutatTypen (siehe [1]) mit einer voran- gestellten Nummer (beginnend mit 1) angezeigt. Die Auswahl eines ZutatTyps erfolgt durch Eingabe dieser Nummer. Die Eingabe der Zahl 0 beendet das Hinzufügen von Zutaten zu Ihrem Vorrat. Nach jedem ausgewähltem ZutatTyp muss die/der Benut- zer:in angeben in welcher Menge die Zutat im Vorrat verfügbar ist (z.B. vorrätige Zu- tat Spaghetti, 500 Gramm).

Bitte beachten:

(1) Für das Speichern der Menge einer Zutat und des vorrätigen ZutatTyps selbst, be- nutzen Sie bitte ein Objekt der Klasse Zutat. Wie schon beim „Rezept anlegen“ be- schrieben, hat die Klasse Zutat Objektvariablen für die Menge und den ZutatTyp. Spei- chern Sie die vorrätigen Zutaten dazu in einem Array namens „vorrat“ mit 25 Feldern,

das Sie in der main-Methode Ihrer Anwendung anlegen. Dieses Array stellt Ihren Vor- rat dar.

[6] Rezeptvorschlag

Die Funktionalität „Rezeptvorschlag“ überprüft welche Rezepte Ihrer Rezeptsamm- lung mit den vorrätigen Zutaten aus Ihrem Vorrat zubereiten lassen. Überprüfen Sie dazu für jedes Rezept ihrer Rezeptsammlung, ob alle benötigten Zutaten des Rezepts auch in der benötigten Menge in Ihrem Vorrat verfügbar sind.

Zeigen Sie im Anschluss einen Überblick über die Rezepte, deren Zutaten in ausrei- chender Menge verfügbar sind, in Form einer durchnummerierten Liste an:

Rezeptvorschlag: ==============

1. Butterbrot

2. Spiegelei mit Schnittlauch ...

Wenn kein Rezept zubereitet werden kann, geben Sie einen entsprechenden Hinweis aus.

 [7] Programm beenden: Ja, genau hier beenden Sie das Programm
 
also mein Ansatz wäre immer noch wie vorher...
Java:
enum Zutat{
    Stein(500);
    private int gewicht;
    Zutat( int gewicht);
    public int getGewicht(){
        return this.gewicht;
    }
}
deine "Rezept klasse" hat einfach nur ne liste drinnen die dir die zutaten speichert
Java:
public class Rezept{
    private ArrayList<? extends Zutat> zutatenliste = new ArrayList();
 
    public Rezept ( String name ){
     
    }
    public void addZutat( Zutat zutat){
        zutatenListe.add( zutat );
    }
    public void printRezept(){
        System.out.println(this.name)
        for ( var zutat : zutatenliste ){
            System.out.println(zutat);
        }
    }
}
jetzt mit dem enum kannst du den oberen code auch ändern anstatt auf Strings zu vergleichen , vergleichst du auf Enum werte in Zutat

bei Rezept machst noch einen Getter der dir die Liste gibt, dann kannst du beim "ausprobieren" des Rezeptes für jedes element in der Liste den Vorratsmanager fragen "gibts das noch wenn ja gibs mir" .. wenn du 1 mal null zurück bekommst weißt du dass das rezept nicht funktioniert


Java:
public class VorratsManager{
  
      
    public Zutat gibMirZutat(Zutat zutat){
        if ( zutat == Zutat.Stein){
            if( SteinVorrat-zutat.getGewicht() <= 0 ){
                return null; // gibt keine mehr :(
            }
            else {
                SteinVorrat -= 1;
                return new Stein(); // wenn du hier bist gibts noch steine als zutat
            }
        }
    }
  
}
du kannst auch allles mit deinen arrays aber da bin ich raus

PS: es ist jetzt noch ein rechenfehler drin aber den wirst du irgendwann raus finden 😉 beim gewicht
 
Es sollen mögliche Rezepte auf Grundlage des Vorrates an Zutaten und der benötigten Menge der Zutaten, die in den Rezepten festgehalten sind ausgegeben werden.
Im Grunde genommen, musst du doch nur für jede einzelne Zutat eines Rezeptes prüfen, ob sie in der ausreichenden Menge im Vorrat vorhanden ist. Sobald eine Zutat nicht oder nicht ausreichend im Vorrat ist, dann kann die Prüfung abgebrochen werden. Das machst du für jedes Rezept.
 
Im Grunde genommen, musst du doch nur schauen, ob die im Rezept aufgezählten Zutaten (in der ausreichenden Menge) im Vorrat vorhanden sind. Ist das der Fall, dann kann das Rezept als Vorschlag genannt werden. Das machst du für jedes Rezept.
das rezept wird im moment ja nicht mal gespeichert ... oder "hat" einen passenden speicherort

bis jetzt ist die einzige "logik" die passiert
Java:
         Scanner sc = new Scanner(System.in);
        
         ZutatTyp zutatTypen[] = new ZutatTyp[25];
         Rezepte recipes[] = new Rezepte[10];
         Zutat vorrat[] = new Zutat[25];

das verarbeiten wird ja vorbehalten... also 3 arrays ... joa passend ist anders aber wie gesagt man kann es natürlich mit arrays machen
 
Da habt ihr absolut Recht. Das Problem, ist dass Vorgabe ist mit festen Arrays zu arbeiten und nicht mit ArrayLists, erstes Semester OOP. Mein Ansatz ist bisher mit 12 Vorschleifen und equals() zu arbeiten, nur tu ichs mir damit schwer.
 
Das Rezept und die Zutattypen etc werden bei Eingabe über die Konsole abgefragt und gespeichert und dementsprechend immer wieder gelöscht nach Beenden des Programms
 
Ich finde Ihr Projekt gut, aber ich würde auf jeden Fall ein Kommentarfeld hinzufügen, in dem Sie die Besonderheiten des Kochens und andere wichtige Punkte angeben können, die nicht automatisch vorgeschrieben werden können.
 
Hallo zusammen,

ich soll eine Methode schreiben, mit der ich anhand der zuvor eingegeben Daten mögliche Rezepte ausgeben lassen soll. Ich stehe allerdings noch total auf dem Schlauch und wäre froh über ein paar Hinweise zum weiteren Vorgehen.

Es sollen mögliche Rezepte auf Grundlage des Vorrates an Zutaten und der benötigten Menge der Zutaten, die in den Rezepten festgehalten sind ausgegeben werden.
Es gibt ein Array Rezepte recipes[10] befüllt mit name, beschreibung und zutaten[](bestehend aus menge und zutatTyp s.u.)
Ein array Zutat vorrat[25], dort sind ZutatTyp und Menge vermerkt
Es gibt außerdem noch ein array zutatTypen[25] in dem generell Zuttattypen erfasst werden können mit Beschreibung, Namen und Mengeneinheit(NICHT der Anzahl an Menge, die soll in vorrat[] erfasst werden, allerdings glaube ich nicht, dass ich dieses brauche, da alle relevanten Information in recipes[] und zutaten[], sowie vorrat[] ( Benötigte Zutaten + Menge eines ZutatTyps für ein Rezept und abgleichend die Menge des ZutatTyps im Vorrat. Theoretisch weiß ich wohin ungefähr, allerdings habe ich keine alkoholfreier sekt test! Wäre wie gesagt auch für schubser in die richtige Richtung dankbar.
Hier noch kurz etwas code zur verdeutlich der Klassen und Objektlage:
[CODE lang="java" title="Main"] public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

ZutatTyp zutatTypen[] = new ZutatTyp[25];
Rezepte recipes[] = new Rezepte[10];
Zutat vorrat[] = new Zutat[25];

verarbeiteAuswahl(sc, zutatTypen, recipes, vorrat);

}[/CODE]
[CODE lang="java" title="Klasse ZutatTyp"]public class ZutatTyp {
private String name;
private String beschreibung;
private String mengenEinheit;

public ZutatTyp(String name, String beschreibung, String mengenEinheit) {
this.name = name;
this.beschreibung = beschreibung;
this.mengenEinheit = mengenEinheit;
}
public ZutatTyp(String name, String mengenEinheit) {
this.name = name;
this.mengenEinheit = mengenEinheit;
}
public ZutatTyp() {

}[/CODE]

[CODE lang="java" title="Klasse Rezepte"]public class Rezepte {

Zutat[] zutaten = new Zutat[10];

private String name;
private String beschreibung;
[/CODE]

[CODE lang="java" title="Klasse Zutat"]
public class Zutat {

private ZutatTyp zutatTyp;
private int menge;

public Zutat() {

}[/CODE]
Ich würde auch mehr Zeilen mit allen möglichen Zutaten und Bestandteilen von möglichen Gerichten hinzufügen.
 

Neue Themen


Zurück
Oben