ArrayList überschreibt sich bei jeden Aufruf selbst

gelbe_decke

Grünschnabel
Schönen guten Abend,
ich verzweifel gleich beim programmieren, habe noch nie mit einer ArrayList oder ähnlichen programmiert, wär toll wenn mir jemand helfen könnte.
ich hab folgendes Problem mit einer ArrayList...ich würde gerne Werte in eine ArrayList speichern, eigentlich klappt auch alles. Die ArrayList erhöht auch ihren size() um eins wenn ich ein neues Objekt dazufüge. Nur leider überschreibt sie alle Plätze mit dem neuen Element
Hier mal mein Code: (Auszüge)

Erst die Klasse die die Liste enthält
Code:
public class Database {

	private ArrayList <Recipe> recipecollection = new ArrayList<Recipe>();
	//Objekt wird bei jeden Aufruf neu überschrieben****
	
	public void setRecipelist(Recipe recipe)
	{
		recipecollection.add(recipe);
		print();
	}

	public void print()
	{
		for(int i =0; i<recipecollection.size();i++)
		{
			System.out.println("Gericht "+" "+recipecollection.get(i)); 
			/*
			 * Erklärung:
			 * Beim ersten aufruf steht hier z.B. "a"
			 * beim zweiten steht dann nicht "a b" sondern "b b"
			 */
			
			
			System.out.println(recipecollection.size()); //größe wächst bei jeden neu anlegen
		}
		
			
	}

nun die Klasse mit der in ein Object (Recipe) in die Liste hinzufüge

Code:
public class MvController 
{

	private MainGui start = new MainGui();
	
	private Recipe recipe = new Recipe ();
	private  Database data = new Database();
	
	
	private void setStart()
	{
		//Startoberfläche wird erzeugt
		start.setStartGui();
	}
	
	public void investRecipe(String name, String ingridend, String  unit, int amount, String descri)
	{
		recipe.setName(name);
		recipe.setIngredient(ingridend);
		recipe.setUnit(unit);
		recipe.setAmount(amount);
		recipe.setDescription(descri);
		data.setRecipelist(recipe);
		
		//auf getter und setter von Recipe zugreifen
		
	}

Die klasse Recipe und wie die Daten kommen ist hierfür egal weil ja was ankommt

Vielen Dank schon mal für eure Hilfe :) ;-)
 
Da ist aber kein Fehler, das funktioniert alles, wie es soll. Sicher, dass du da nicht noch andere Sachen machst?
 
Hi,
dein Problem ist eigentlich ganz einfach.
Zu erst einmal ist es wichtig zu wissen, dass in einer List nur die Referenz zu einem Objekt gespeichert wird. D.h. beim hinzufügen eines Objektes wird nur die Referenz und nicht das Objekt an sich gespeichert.
In deinem Code benutzt du das Objekt Recipe, welches du 1 mal initialisierst.
Java:
private Recipe recipe = new Recipe ();
In der List wird nun auf diese eine Instanz referenziert. Wenn du nun in deiner Methode "investRecipe(...)" den Namen, etc. für dein Objekt setzt, überschreibst du die Werte in deiner Variable/Objekt "recipe". Dadurch bekommst du zwar mehr Referenzen in deiner List, allerdings verweisen alle auf ein und das selbe Objekt. Daher wächst zwar die size() an, die Werte die ausgegeben werden, sind aber bei allen die gleichen.

Damit du dein gewünschtes Ergebnis erziehlen willst, musst du einfach für jedes Rezept ein neues Objekt anlegen und schon funktionierts auch. ;)
Java:
    public void investRecipe(String name, String ingridend, String  unit, int amount, String descri)
    {
        Recipe recipe = new Recipe ();
        recipe.setName(name);
        recipe.setIngredient(ingridend);
        recipe.setUnit(unit);
        recipe.setAmount(amount);
        recipe.setDescription(descri);
        data.setRecipelist(recipe);
    }

Gruß

Fabio
 
Zuletzt bearbeitet:
Zurück