Commander_COM Geschrieben 20. April 2005 Geschrieben 20. April 2005 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 Zitieren
kingofbrain Geschrieben 20. April 2005 Geschrieben 20. April 2005 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 Zitieren
Commander_COM Geschrieben 20. April 2005 Autor Geschrieben 20. April 2005 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? Zitieren
kingofbrain Geschrieben 20. April 2005 Geschrieben 20. April 2005 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 Zitieren
Commander_COM Geschrieben 20. April 2005 Autor Geschrieben 20. April 2005 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. Zitieren
Commander_COM Geschrieben 20. April 2005 Autor Geschrieben 20. April 2005 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? Zitieren
perdian Geschrieben 20. April 2005 Geschrieben 20. April 2005 Ein Befehl wie: System.out.println( ((Merkmal)it.next()).farbe); funzt irgendwie nicht.Warum nicht? Fehlermeldung? Stacktrace? Umgebungstemperatur? Gravitationskonstante? Zitieren
perdian Geschrieben 20. April 2005 Geschrieben 20. April 2005 aber irgendwie zeigt er mir nur 10 mal (bei 10 objekten im array) die eigenschaft muster des LETZTEN objektes in der liste anDann 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. Zitieren
Commander_COM Geschrieben 20. April 2005 Autor Geschrieben 20. April 2005 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 Zitieren
perdian Geschrieben 20. April 2005 Geschrieben 20. April 2005 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 Zitieren
Commander_COM Geschrieben 20. April 2005 Autor Geschrieben 20. April 2005 wow. stimmt. das hatte ich total übersehen. vielen vielen dank! Zitieren
Empfohlene Beiträge
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.