Zum Inhalt springen

ArrayList Operationen


Commander_COM

Empfohlene Beiträge

Hi,

ich versuche mich gerade an ArrayList und habe folgendes Porblem:

In meiner ArrayList sind meinetwegen 10 Objekte Auto mit drei verschiedenen Eigenschaften gespeichert.

Jetzt will ich das Array durchsuchen und automatisch alle Autos miteinander vergleichen, danach Ausgabe einer Auswertung, z.b.:

10 Autos gesamt

3 rot, schnell, teuer

6 blau, lahm, noch teurer

1 schwarz, superschnell, kostenlos

Da ich totaler Java-newbie bin, steh ich da ziemlich auf dem Schlauch.

also das array erzeugen und die objekte reinpacken hab ich schon hinbekommen, aber wie realisiere ich die obigen funktionen?

Grüße & vielen Dank für Antworten

Link zu diesem Kommentar
Auf anderen Seiten teilen

Servus,

Du musst durch die ArrayList iterieren und jedes Objekt anschauen und die interessanten Eigenschaften sammeln.

Hier mal ein Beispiel:


ArrayList autos = new ArrayList();


// autos fuellen


for(int i = 0; i < autos.size(); i++)

{

    Auto auto = (Auto) autos.get(i);


    // autoeigenschaften sammeln

}


// autoeigenschaften auswerten und ausgeben

So, Du gehst in einer for-Schleife durch alle Elemente der List und holst Dir laut dem index jedes Element.

Alternativ kannst Du auch mit dem Iteratorobjekt der Liste und einer while-Schleife arbeiten, was die schönere Alternative ist in meinen Augen. Dazu muss man aber wissen, was ein Iterator ist, deshalb nehmen Anfänger oft die obige Art.

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

for ( Iterator it = c.iterator(); it.hasNext(); )

{

System.out.println( it.next() );

//Hier fehlt mir der Befehl zum auslesen der Objekteigenschaften

}

Das obige hab ich schon... also das mit dem Iterator verstehe ich schon denke ich...

ich hatte eigentlich folgende Idee: nimm das erste objekt der Liste und lege es in eine ergebnisliste. vergleiche es dann mit den restl. objekten in der ersten liste. wenn du am ende der ersten liste angekommen bist, dann speichere die anzahl der gleichen objekten des typs erstes objekt als eigenschaft zum ersten objekt der zweiten liste hinzu. dann lösche alle objekte des ersten typs aus der ersten liste. wiederhole das, bis die erste liste leer ist.

geht das?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Servus,

ich verstehe zwar nicht ganz, was Du mit Deinen verschiedenen Listen machen willst oder wie das funktionieren soll, aber von der objektorientierten Sicht ist es doch so, oder?:

Du hast Autos mit Eigenschaften. Du willst am Schluss eine Statistik über verschiedene Eigenschaften (Farbe, Geschwindigkeitskategorie, Preiskategorie).

Also entweder Du hast ein Objekt Statistikeintrag, dann hätte das die gewünschten Kategorien und eine Information, wieviele Autos diese Kategorien haben, oder Du zählst einfach so beim iterieren mit, welches Auto Deine Kategorien erfüllt. Dabei ist die Frage, zählen immer alle Kategorien? Also so, wie im Beispiel im ersten Posting, oder zählen die unabhängig?

Also ich habe 10 Autos, 7 schwarz, 3 weiss, 4 schnell, 2 sehr schnell, 3 langsam, 10 teuer.

Versuche, nicht zu viel mit Hilfslisten zu arbeiten, da man dort schnell die Übersicht verliert (war das die Hilfsliste für die Eigenschaften oder für die Auswertung?). Definiere Objekte, dazu ist Java da. Und mit denen kannst Du gut arbeiten.

Mein Gedanke bei deiner Beispielauswertung oben:


class Statistikeintrag

    int anzahlautos

    String farbe

    String schnelligkeitskategorie

    String preiskategorie

Wenn Du diese Objekte erzeugst und pflegst bei jeder Iteration, dann solltest Du am Schluss eine gültige Liste mit Statistikeinträgen haben.

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Iterator it = c.iterator();

while (it.hasNext()) {

System.out.println( ((Merkmal)it.next()).get_Musterung() ) ;

}

damit bekomme ich jetzt die eigenschaften der objekte in der arrylist...

aber irgendwie zeigt er mir nur 10 mal (bei 10 objekten im array) die eigenschaft muster des LETZTEN objektes in der liste an?!?

kann es sein, dass ich den iterator irgendwie noch auf den anfang der liste setzen muss, wenn ja, wie?

Link zu diesem Kommentar
Auf anderen Seiten teilen

aber irgendwie zeigt er mir nur 10 mal (bei 10 objekten im array) die eigenschaft muster des LETZTEN objektes in der liste an
Dann ist das letzte Objekt 10x in der List drin enthalten. Der Iterator fängt jedesmal wieder am Anfang der Datenstruktur mit dem Traversieren an - das ist festgelegtes Verhalten.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Das kann aber eigentlich nicht sein....

for(int x=1; x<5; x++)

{

int zufallmuster = 1+ generator.nextInt(2);

int zufallfarbe = 1+ generator.nextInt(2);

int zufallform = 1+ generator.nextInt(2);

Kindermachen(Vater,Mutter,Kind, zufallmuster, zufallfarbe, zufallform);

System.out.println( Kind.get_Musterung() + " " + Kind.get_Farbe() + " " + Kind.get_Fuehler() );

c.add(Kind);

}

erzeugt zufällige kombinationen von Kindern in der Liste

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das kann aber eigentlich nicht sein....
Wetten, dass doch? :)

Kindermachen(Vater,Mutter,Kind, zufallmuster, zufallfarbe, zufallform);
Da haben wir es doch schon. Es erfolgt eben keine Kombination von Kindern innerhalb der Liste.

Du veränderst immer das gleiche Kind-Object und fügst es anschließend nochmal an die Liste an. Was du brauchst ist sowas hier:

for(int x=1; x<5; x++)

{

Kind currentKind = new Kind();

int zufallmuster = 1+ generator.nextInt(2);

int zufallfarbe = 1+ generator.nextInt(2);

int zufallform = 1+ generator.nextInt(2);

Kindermachen(Vater,Mutter,currentKind, zufallmuster, zufallfarbe, zufallform);

System.out.println( currentKind.get_Musterung() + " " + currentKind.get_Farbe() + " " currentKind.get_Fuehler() );

c.add(currentKind);

}

Und lies dich am besten mal in einen Java Styleguide ein:

http://www.cs.hut.fi/~candolin/java/styleguide.html

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...