Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Verglaich Java - Delphi Iteratoren (https://www.delphipraxis.net/125111-verglaich-java-delphi-iteratoren.html)

Luckie 30. Nov 2008 22:23


Verglaich Java - Delphi Iteratoren
 
Zum Hintergrund siehe meinen vorherigen Beitrag zum Thema: http://www.delphipraxis.net/internal...=970945#970945

Jetzt geht es mir um Iteratoren. Mit hilfe von Iteratoren kann man ja zum Beispiel in Java durch eine ArrayList interieren. Allerdings ist mir der Unterschied bei der Verwendung einer for-Schleife nicht ganz klar.

mkinzler 30. Nov 2008 22:29

Re: Verglaich Java - Delphi Iteratoren
 
Sie bewirkt zwar das gleiche ist aber nicht so schön

Luckie 30. Nov 2008 22:37

Re: Verglaich Java - Delphi Iteratoren
 
Also das ist dann wohl eher geschmacksache:
Code:
   private void ausgabe(ArrayList kunden)
   {
      ListIterator iterKunden = kunden.listIterator();
      while (iterKunden.hasNext())
      {
         Kunde k = (Kunde)iterKunden.next();
         System.out.println(k.getName() + ", " + k.getVorname());
         ListIterator iterKonten = k.getKonten().listIterator();
         while (iterKonten.hasNext())
         {
            Konto ko = (Konto)iterKonten.next();
            System.out.println(ko.getBezeichnung() + ": " + ko.getSaldo());
         }
         System.out.println("");
      }
   }
Delphi-Quellcode:
procedure TForm1.UpdateKonten(Kunde: TBankKunde);
var
  Konto            : TBankKonto;
  i                : Integer;
begin
  Listbox2.Clear;
  if Assigned(Kunde) then
  begin
    for i := 0 to Kunde.GetKontenCount - 1 do
    begin
      Konto := Kunde.GetKonto(i);
      Listbox2.Items.Add(IntToStr(Konto.KontoNummer)+ ': ' + IntToStr(Konto.Saldo) + ' Euro');
    end;
  end;
end;
In Java muss ich erst noch einen ListIterator erzeugen und in der Schleife das zurückgegeben Objekt casten.

xaromz 30. Nov 2008 22:37

Re: Verglaich Java - Delphi Iteratoren
 
Hallo,
Zitat:

Zitat von mkinzler
Sie bewirkt zwar das gleiche ist aber nicht so schön

nicht nur das. Mit Iteratoren kann man (wenn man will) lustige Sachen anstellen. Sie geben zwar immer das nächste Element zurück, aber welches das ist, kann der Programmierer des Iterators frei entscheiden. Du kannst z. B. einen Iterator schreiben, der in einer Liste nur die Elemente mit geradem Index zurückliefert.

Ein weiterer Vorteil ist, dass viele Klassen in Java das Interface Iterable implementieren. Du kannst also alle diese Klassen iterieren, ohne wissen zu müssen, wie Du an ein einzelnes Element kommst oder wie Du die Anzahl der Elemente ermittelst.

Der Itarator in Java hat übrigens noch eine feine Methode: Remove. Damit kann man das aktuelle Element aus der Liste entfernen, ohne sich um die Zählvariable kümmern zu müssen. Sowas ist in Delphi nur zu machen, wenn die Schleife auf Null herunterzählt.

//Edit: Wo ich gerade Deinen Beitrag sehe. So iteriert man in Java natürlich nicht. Man macht das so:
Code:
private void ausgabe(ArrayList kunden)

  for (Kunde k : kunden)
  { 
    System.out.println(k.getName() + ", " + k.getVorname());
    for (Konto ko : k.getKonten())
       System.out.println(ko.getBezeichnung() + ": " + ko.getSaldo());

    System.out.println("");
  } 
}
Das ist schon einfacher zu lesen.

Gruß
xaromz

Luckie 30. Nov 2008 22:45

Re: Verglaich Java - Delphi Iteratoren
 
Ah, dann macht das Erstellen des ListIterators Objektes natürlcih wieder wett, wenn man dadurch Vorteile erlangt gegenüber einer schnöden for-Schleife.

@xaromz: Zu deinem Edit: Wo ist denn da jetzt der Iterator geblieben? Sieht natürlich schöner aus, das stimmt, aber ich lasse es mal zu Demonstartionszwecken bei der Verwendung eines Interators.

xaromz 30. Nov 2008 22:48

Re: Verglaich Java - Delphi Iteratoren
 
Hallo,

Zitat:

Zitat von Luckie
@xaromz: Zu deinem Edit: Wo ist denn da jetzt der Iterator geblieben?

der Iterator steckt im "for (a : b)" drin. Das funktioniert im Grunde genauso wie das for .. in unter Delphi: Der Compiler formt den Code so um, dass er Deinem Beispiel entspricht, d. h. Iterator holen und while-Schleife bauen.

Gruß
xaromz

Luckie 30. Nov 2008 22:57

Re: Verglaich Java - Delphi Iteratoren
 
Dein Code compiliert bei mir übrigens nicht. Kann es daran liegen, dass ich in Wirklichkeit J# mit dem VS benutze und kein reines Java?

Zum einem will er bei for ein Gleichzeichen anstatt dem Doppelpunkt und wenn ich das ändere, will er hinter der for-Zeile ein Semikolon.

fkerber 30. Nov 2008 23:12

Re: Verglaich Java - Delphi Iteratoren
 
Hi!

Also von der reinen Java-Syntax kenne ich das so wie in dem Beispiel oben und das kompiliert dann auch...


Ciao, Frederic

memphis 1. Dez 2008 10:51

Re: Verglaich Java - Delphi Iteratoren
 
Hallo,

J# beinhaltet Wrapper für alle Klassenbibliotheken des JDK 1.1.4 für .NET (erzeugt also keinen Java-Bytecode). Die oben erwähnte for-Schleife für Iteratoren wurde erst in Java 1.5 eingeführt. Ich würde generell von J# abraten (meines Wissens hat Microsoft die Entwicklung eingestellt) und für Lernzwecke "richtiges" Java verwenden.

Grüße, lukas.

Luckie 1. Dez 2008 12:11

Re: Verglaich Java - Delphi Iteratoren
 
Auf dem Schulrechner war aber leider nur das VS von Micosoft installiert. Da ich zu Hause die Express Versionen nutze hatte es sich angeboten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz