Zugriff auf Array-Liste

DieDreiJavas

Mitglied
Hallo!
Wir haben folgende Frage:
Wir wollen einen Cocktail-Rezept-Manager erstellen. Dieser soll folgende Funktionen zur Verfügung stellen: Rezept ansehen, editieren, löschen. Wir haben überlegt, das mit einer ArrayList zu realisieren. Dabei würde dann jedes Listenelement für einen Cocktail stehen. Die Frage ist nur, wie man dann auf die einzelnen Elemente zugreifen kann, um z.B. Zutaten direkt in dem Element abzuspeichern bzw. dem Element zuzuweisen.???:L
Vielen Dank schonmal 🙂
 
Kannst auch mit ner erweiterte for-Schleife durchlaufen und mit ner if-Abfrage rausfiltern.
Post mal deinen Code hier rein..
 
Wir haben uns das so gedacht:
Java:
// Liste erzeugen

List<String> liste = new ArrayList<String>();
liste.add ("SexOnTheBeach");
liste.add("Caipi");
system.out.println (liste);
___________________________________________________________

WIe wir Objekte ewinfügen und entfernen wissen wir.
Das Problem besteht jetzt darin, dass wir keine Ahnung haben wiw wir auf die einzelnen Objekte zugreifen können, bzw den einzelenen Objekten noch Attribute(Zutaten der Cocktails) zuweisen können.

Sprich ein Cocktail besteht aus verschiedenen ZUtaten und diese möchten wir jedem einzelenen noch zuweisen, so dass automatisch nach Aufruf des Objekts aus der Liste ( also dem Cocktail) die Zutaten die wir dem Cocktail zuweisen wollen ebenfalls mit aufgerufen werden.
 
Aber Achtung, wenn du mit einer erweiterten for-Schleife (auch for-each genannt) eine durch eine Liste iterierst, wird im Hintergrund ein Iterator verwendet. Solange man mit einem Iterator über eine Liste iteriert, kann diese nicht (bzw. nur durch den Iterator) angepasst werden.
Somit kannst du zumindest im delete Case (wenn du irgendwas suchen willst) keine for-each Schleife verwenden.
 
Eine List mit String ist in dem Fall ja sinnfrei. Definiert doch eine Klasse Cocktail, die alle Zutaten und Eigenschaften eines Cocktails verwalten kann und arbeitet mit einer
Code:
List<Cocktail> cocktailList
 
Also wäre es sinnvoll in diesem Fall eine KLasse "Cocktails" zu erstellen. In dieser Klasse erstellen wir dann Objekte welche zum Beispiel "Sex On The Beach", "Caipi" , etc. heissen. Diesen Objekten geben wir dann die verschiedenen Attribute wie Zutaten und Mengen und Zubereitung.
Nur wie kann man dann auf die jeweiligen Objekte zugreifen, um die Attribute einzugeben? Also nicht die Liste durchlaufen, sondern halt z.B. gezielt nach einem Objekt (z.B. "Caipi") suchen, um es zu editieren?
Oder ist das Ganze überhaupt so möglich Oo???
 
Du kannst eine [c]Map<String, Cocktail>[/c] erstellen, damit kannst du in Laufzeit [c]O(1)[/c] dann auf ein beliebiges Objekt zugreifen, sofern du den Key (den String) hast.
 
Hallo Zusammen,

auch ich rate dazu eine eigene Klasse Cocktail zu erstellen.
Aber das wurde ja bereits gesagt.

Meine Frage wäre, wieso du denn unbedingt direkt auf das Element zugreifen willst.
Wenn du die Cocktail-Elemente in einer Linearen Liste verwaltest, kannst du doch auch jedes Element durchsuchen.

Natürlich ist die Laufzeit nicht optimal, aber ich glaube das ist bei euren Datensätzen nicht wirklich ein Problem.
Ist so meiner Meinung nach einfacher zu implementieren.

Gruß Moon93
 
Achtung: Über eine Map kannst du dann nichtmehr iterieren. Ist klar sinnvoller eine neue Klasse zu erstellen, dann kannst du direkt auf n value zugreifen. Ist wohl einfacher.

[EDIT]*einfach iterieren..[/EDIT]

Regards,
 
Zuletzt bearbeitet:
Ich meinte allgemein iterieren, wenn man .values() angibt geht das, vergisst er das geht es nicht.
(Wenn man nur den Namen der map angibt)

Aha :autsch:

Wenn ich vergesse das Array anzugeben, dann kann ich auch nicht drüber iterieren.

Außerdem bekommt man das schon zur compilezeit einen Error?
 
Aha :autsch:

Wenn ich vergesse das Array anzugeben, dann kann ich auch nicht drüber iterieren.

Außerdem bekommt man das schon zur compilezeit einen Error?

Es geht grade aber um den allgemeinen Aufbau einer erweiterten for Schleife, wenn du den wie bei einer ArrayList verfolgst geht das nicht, das Einzige auf was ich mit meinem Post aufmerksam machen wollte.

Wenn du den Klassennamen weglässt funkt. das auch nicht.. sinnloser Post.
 
@x22, wenn du nicht über Maps iterieren willst, wiel sie Iterable nicht implementieren, dann mach doch einfach du das für deine Maps und delegier alle Methoden an [c]values()[/c] 😉
 
Genau, zurück zum Thema😳

wenn du Dir deine eigene Cocktail-Klasse erstellst, kannst du den Key/Namen ja per Konstruktor zuweisen.

Java:
cocktailListe.add(new Cocktail("Caipi", "Zutat1", "Zutat2",..was auch immer));

dann verpasst du deiner Cocktailklasse eine Methode, die den gesuchten Namen abgleicht

Java:
public boolean isTheRightOne(String name){
if(this.name.equals(name)){
return true;
}else{
return false;
}
}

dann kannst du einfach über deine cocktailListe iterieren und bekommst von dem Passenden CocktailObjekt bescheid wenn es das entsprechende ist.

Gruß Vanny
 
ich glaube wir kommen vom thema ab....

joa.. ich mag das nur nicht, wenn Leute..*hust*..ein Post über meinem.. gleich mit so komischen Beispielen kommen und sofort was zu kritisieren haben, aber nichts zum Thema direkt.
Hab nur n Hinweis gegeben, mehr nicht. Da sollte man nicht jedes Wort in einzelne Buchstaben zerlegen und diese durchleuchten nur um seine Postanzahl zu erhöhen.

War nicht meine Intension, von Thema abzuweichen.

@faetzminator: Ich lass das einfach in ner ArrayList stehen 😀

Und jetzt zurück zum Thema.
Pseudo-Code wie sowas auszusehen hat:

Java:
public class Article {
	
	int preis;
	String description;
	
	
	public Article(int preis, String description) {
		super();
		this.preis = preis;
		this.description = description;
	}
...


Test-Klasse:

Java:
public class TestArticel {

public static void main(String[] args){
	
	ArrayList<Article> list1= new ArrayList<Article>(5);
	Article art1= new Article(500, "TV");
	Article art2= new Article(50, "Radio");
	Article art3= new Article(100, "Kaffeemaschine");
	Article art4= new Article(300, "Handy");
	Article art5= new Article(600, "Krahn");
		
	list1.add(art1);
	list1.add(art2);
	list1.add(art3);
	list1.add(art4);
	list1.add(art5);
	
	getList(list1);

 }

	public static void getList(ArrayList<Article> list1){
		for(Article article: list1){
			System.out.println(article.getPreis());
			System.out.println(article.getDescription());
		}
	}

So brauchst keine Map, lässt es einfach in der ArrayList drin, auf dein Beispiel anpassen, Fertig.:toll:
Regards,
 
Zuletzt bearbeitet:
ich habe das mal nachprogrammiert mit den Cocktails und bei mir funktioniert das richtig gut, obwohl ich noch nicht lange dabei bin!
Danke x22.:applaus:


Grüße Frischling
 

Neue Themen


Zurück
Oben