Klassenübergreifendes Problem

Status
Nicht offen für weitere Antworten.
> Problem ist wohl, dass ich im Methodenkopf schon ein Recipe angeben soll, dass im Rumpf erst erstellt werden soll...

dieses Problem ist unlösbar und so wahrscheinlich auch gar nicht gestellt worden

andererseits könntest du deine eigenen Recipe auch unabhängig von der vorgegebene Methode in die passenden Listen einfügen oder ist das verboten?

> Gleiches Problem übrigens mit der Methode "add(Ingredients ingredient, int quantity)"...

wieso, dort wird doch kein neues Objekt innerhalb der Methode erstellt?
 
du meinst, ich sollte in der main-Methode nicht auf die Klasse BarActivity zugreifen, sondern direkt den Konstruktor aus Recipe aufrufen? War auch meine Überlegung, aber dann habe ich ja vordefinierte Methoden aus dem Interface, die gar nicht benötigt werden. Und dass solch ein Fall vorhanden ist, ist unwahrscheinlich...
 
die Methode ist offensichtlich darüf da, über IOTools etwas einzulesen,
das kann sie doch gut und ist eine sinnvolle Aufgabe oder wo liegt dabei das Problem?

nur wenn du auf anderem Weg noch Recipes erstellen willst, dann hilft dir diese Methode wenig,
weil es nix bringt, dieser Methoden einen Parameter zu übergeben
 
Die Methode "add" ist ja jeweils dafür da ein Recipe-Objekt bzw. ein Ingredients-Objekt zu generieren.
Die Daten wie Name, Menge, etc. werden über die IOTools eingelesen. Das ist richtig.
Dass ich das machen kann, muss ich doch zunächst einmal einen Konstruktor erstellen der dann in der add-Methode aufgerufen wird. Oder irre ich mich da?

Was würdest du mit der Methode machen? Bzw. wie würdest du diese in der Klasse BarActivity überschreiben?
Danke für deine Hilfe!
 
> Dass ich das machen kann, muss ich doch zunächst einmal einen Konstruktor erstellen

damit mit Methode add() ihre Aktion ausführt musst du nichts machen, außer die Methode aufzurufen, ein Parameter kann entfallen
--------
> muss ich doch zunächst einmal einen Konstruktor erstellen

Konstruktoren kann man nicht erstellen außer du meinst den Vorgang des Programmierens, des Schreibens von Code,
Objekte kann man erstellen, aber add() erstellt sich selber ein Objekt, du musst nur add() aufrufen
-----
> muss ich doch zunächst einmal einen Konstruktor erstellen der dann in der add-Methode aufgerufen wird.

total unverständlich

edit:
damit
> Recipe.recipeList.add(new Recipe(inputNa, inputNmb));
aus add() funktioniert, muss es natürlich in Recipe einen passenden Konstruktor geben,
wenn der noch fehlt, dann musst du den tatsächlich 'erstellen', also programmieren

edit2:

gibts aber schon:
public Recipe(String nameRec, int inputNmb) {
this.nameRec = nameRec;
for (int i = 0; i < inputNmb; i++)
Recipe.ingredient.ingredientList.add(new Ingredient());
}

-------

> Bzw. wie würdest du diese in der Klasse BarActivity überschreiben?

wieso denn irgendwas überschreiben? sehe keinen Zusammenhang zum bisherigen
 
Mit Konstruktor erstellen, meinte ich den Code generieren.
Damit ein neues Objekt recipe erstellt wird, benötige ich doch den Aufruf eines Konstruktors bzw. die "new"-Anweisung, oder wird die hier durch den Methodenkopf (Das was in Klammern steht, also (Recipe recipe)) ersetzt?
dann habe ich dem Objekt aber noch keinen Namen übergeben... Müsste es dann nicht korrekterweise im Rumpf heißen:
recipe = new Recipe()?
Und somit hätten wir dann wieder den Aufruf des Konstruktors...

überschreiben muss man die Methoden deshalb, weil sie ja aus einem Interface implementiert wurden. Deshalb kann ich die Methoden ja auch nicht verändern und z. Bsp. "static" oder so mitaufnehmen im Methodenkopf.
 
> Damit ein neues Objekt recipe erstellt wird, benötige ich doch den Aufruf eines Konstruktors bzw. die "new"-Anweisung

passiert bereits innerhalb der add()-Methode:
> Recipe.recipeList.add(new Recipe(inputNa, inputNmb));

-------

> oder wird die hier durch den Methodenkopf [..] ersetzt?

Methodenkopf klingt etwas allgemein, falls du den Parameter meinst, der spielt innerhalb der Methode derzeit keine Rolle,
deswegen sage ich ja, dass er auch wegfallen könnte, falls das Interface ihn nicht vorgibt


--------

> dann habe ich dem Objekt aber noch keinen Namen übergeben... Müsste es dann nicht korrekterweise im Rumpf heißen:
> recipe = new Recipe()?

Objekte haben eh keinen Namen, wenn dann wäre es der Name einer Variable,
aber die ist auch nicht nötig,

aber ja, denkbar wäre statt
> Recipe.recipeList.add(new Recipe(inputNa, inputNmb));

auch

recipe =new Recipe(inputNa, inputNmb);
Recipe.recipeList.add(recipe);

oder gar

Recipe dornroeschen =new Recipe(inputNa, inputNmb);
recipe = dornroeschen;
Recipe fussball = recipe;
Recipe.recipeList.add(fussball);

(Variablen-)Namen sind Schall und Rauch, das Objekt wird dadurch nicht verändert,
die kürzeste Form ist weiterhin direkt

Recipe.recipeList.add(new Recipe(inputNa, inputNmb));
 
siehe auch mein letztes Post,
zum neuen: du musst einen Wert/ ein Argument für den Parameter übergeben

im einfachsten Fall
activity.add(null);

oder

Recipe recipe = ..;
activity.add(recipe);
 
Kann es sein, dass in diesem Fall dann (siehe Code der main-Methode), dann 2 Objekte recipe generiert werden?
Es wird auf der Konsole 2 mal hintereinander die Eingabemaske für ein Recipe ausgegeben.
Was muss ich tun, dass es nur einmal erscheint?

Code der main-Methode:
Code:
		String inputNa = IOTools.readLine("Name of the recipe: ");
		int inputNmb = IOTools.readInt("Number of needed Ingredients: ");
		
		BarActivity activity = new BarActivity();
		Recipe recipe = new Recipe(inputNa,inputNmb);
		
	
		
		activity.add(recipe);
 
kürze deine Zeilen 1-11 auf

BarActivity activity = new BarActivity();
activity.add(null);

den Rest macht add()
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben