Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

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?

Geschrieben

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

Geschrieben

hmm, ich hab erstmal vorrangig das problem, dass ich an die objekte in meiner Main-ArrayList nicht rankomme.

Ein Befehl wie:

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

funzt irgendwie nicht.

Geschrieben

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?

Geschrieben

Ein Befehl wie:

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

funzt irgendwie nicht.

Warum nicht?

Fehlermeldung? Stacktrace?

glaskugel.jpg

Umgebungstemperatur? Gravitationskonstante?

Geschrieben
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.
Geschrieben

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

Geschrieben
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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...