Zuordnung von Variablen einem ArrayList-Objekt

Status
Nicht offen für weitere Antworten.
> public void setQuantityNec(int quantityNec) {
> for (int i=0; i<getIngredientsSize();i++){
> this.ingredient.get(i);
> this.ingredient.get(i).setQuantityNec(quantityNec);
> }
> }


hier setzt du die Zahl QuantityNec bei ALLEN Ingredients, auch Wodca, wo du vorher 2 gesetzt hattest,
das ergibt nur gar keinen Sinn, denn die Angabe soll sich doch nur auf eine Zutat beziehen,

und ja, diese Angabe sollte generell nicht in Ingredient gespeichert werden, wenn ein Ingredient in mehreren Recipes verwendet werden kann,
da brauchst du Kopien oder eine neue Klasse RecipeIngredient oder innerhalb von Recipe unsauber eine zweie Liste oder eine Map mit den zusätzlichen Informationen
 
Wenn ich eine neue Klasse RecipeIngredient erstelle, muss ich dann in der Klasse recipe die bisherige ArrayList die vom Typ <Ingredient> war auch in <RecipeIngredient> umändern?
Oder wie muss ich dies machen?

Fakt ist ja auch noch, dass ich eine neue Liste benötige. Was muss in die Klasse RecipeIngredient alles rein?
Eigentlich doch nur der name nochmals und die dazugehörige Anzahl, oder?
 
> muss ich dann in der Klasse recipe die bisherige ArrayList die vom Typ <Ingredient> war auch in <RecipeIngredient> umändern?
stimmt

> Eigentlich doch nur der name nochmals und die dazugehörige Anzahl, oder?

noch besser Referenz auf das Ingredient-Objekt + neu die Anzahl
 
Wenn ich nun die Methode recipe.addIngredient(RecipeIngredient recipeIngredient) aufrufe möchte ich dann noch vom Objekt recipeIngredient die Methode addIngredient(Ingredient ingredient) aufrufen. Warum funktioniert das nicht?
 
> RecipeIngredient x = ingredient.get(c);

du musst ein neues RecipeIngredient-Objekt anlegen, mit dem Ingredient + der Anzahl,

> recipe.setQuantityNec(addAskingUserQua());

setze die Anzahl direkt in x, statt erst in Recipe x neu zu suchen

-----

wieso hat RecipeIngredient eine Liste von Ingredient, reicht nicht eins?
falls du an mehrerre Zutaten für ein Recipe denkst: dafür hat doch Recipie eine Liste von RecipeIngredients

> möchte ich dann noch vom Objekt recipeIngredient die Methode addIngredient(Ingredient ingredient) aufrufen

eine solche Methode existiert nicht in RecipeIngredient?!
 
> Oder wie war das mit der Referenz gemeint?

statt
> private String name;
eher
private Ingredient indy;

sonst musst du später wieder die Zutat zum Namen suchen, falls du das Zutat-Objekt irgendwo brauchst,
Name ist vielleicht aber auch ok

> Woher weiß dann die Recipe-Klasse bzw. die Bar-Klasse, das ein Objekt RecipeIngredient eigentlich ein Ingredient ist?

die sind nicht das gleiche und Programme wissen eh überhaupt nichts,
alles musst du programmieren,
evtl. beschreibe genauer, welche Situation du meinst
 
entferne erstmal die schlimme Methode setQuantityNec() aus Recipe,
auch die Methode getIngredients() in Recipe scheint mir keinen Sinn zu haben

--------

zur add-Methode
Code:
      for (int i = 0; i < recipe.neededIng; i++) { 
         String inputName = IOTools.readLine("The name of the ingredient: "); 
         for (int c = 0; c < ingredient.size(); c++) { 
            recipeIngredient.ingredient(ingredient.get(c),addAskingUserQua()); 
            if (inputName.equalsIgnoreCase(ingredient.get(c).getName())) { 
               recipe.addIngredient(recipeIngredient); 
            } 
         } 
      }
Zeile 5 fragt nach der Anzahl und diese Zeile wird doch ganz offensichtlich in jedem Schleifendurchlauf duchgeführt,
das muss doch in das if rein...

und was ist 'recipeIngredient'?
eine Variable welchen Types, wo definiert?

es wird anscheinend ständig das gleiche recipeIngredient-Objekt verwendet und mehrmals dann mehrmals per
recipe.addIngredient() hinzugefügt,
deswegen hast du am Ende zweimal das gleiche 'ice'

immer neue Objekte erzeugen, am besten die Variable überhaupt erst im if deklarieren, vorher muss die niemand kennen
 
Ich habe die Deklaration von recipeIngredient nun in die if-Schleife mit rein, aber das ändert ja nichts an meinem Problem, oder doch?
 
es gibt keine if-Schleifen, nur if-Abfragen, if-Blöcke oder was auch immer,

Problem sollte sich dadurch gebessert haben, bei dir vielleicht nicht
 
ist recipes die Liste aller Rezepte?
nehmen wir mal an es gibt Rezept A und B

dann durchläufst du die Rezepte-Liste, bist zunächst bei A,
dann fragst du den User was eigentlich? nach einen Namen?
nur wenn dieser Namen genau in diesem Moment gleich A ist wird dieses Rezept auch gemixt?

später bei B wird der User dann hoffentlich B eintippen oder es passiert nix

-> der User wird IMMER so oft gefragt wie es Rezepte gibt,
man kann ein bestimmtes Rezept nur dann mixen, wenn man genau im richtigen Moment den passenden Namen eingibt
..

du musst dir wirklich mal überlegen, wie man Dinge strukturiert,
erst fragt man genau EINMAL nach den Rezeptnamen, dann sucht man sich das passende Rezept dazu aus irgendeiner Liste,
das sollte wahrscheinlich außerhalb der Bar passieren, denn dieses Rezept könntest du wunderbar als Parameter übergeben,
so würdest du wahrscheinlich wieder mal den Parameter ignorieren

(falls die Liste der Rezepte nur in Bar verfügbar ist, dann übergib von außen ein Dummy-Rezept nur mit dem Namen drin)

edit: schau dir den remove-Ablauf an, das mixen ist so ähnlich von der Rezeptfindung her

----------

zu deinem if usw. sag ich mal nichts, du musst auch irgendwas alleine programmieren, oder dir Kollegen vor Ort suchen,
ich sehe bei dir keine Fortschritte, das ist zu aufwendig
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben