foreach() ?

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

foreach() ?
Gibt es in Java nicht auch so ein tolles [m]foreach[/m] wie in PHP? Wenn wir hier schon so ‘einfach’ mit Arrays arbeiten können…

Wenn es anders heißt und jemand mich nicht versteht: Gemeint ist ein kürzerer Ersatz für [m]for (n = 0; n < array.length; n++) …[/m]


ich benutze in PHP eigentlich immer
while ($x = each($blabla))

und ich denke, so etwas ähnliches gibt es auch in Java.

The key is to use while, not for :slight_smile:


ja, das problem is dann nur, wenn ich den array-schlüssel auch brauche, dann wird’s reichlich unübersichtlich…
[m]while (list($key, $val) = each($array))[/m]
oder so ähnlich ging das…

und du musst das array vorher immer zurücksetzen, mit reset($array). damit er auch tatsächlich vorne anfängt, und nicht ganz hinten, wenn du sowas zweimal machst.


hi

überhaupt nicht. mit $x = each… kannst du ja ganz bequem auf $x[0] = Schlüssel und $x[1] = Daten zugreifen, wofür der Umweg mit list?

zurücksetzen muss man, ist klar.

Naja es ging mir ja nur darum, dir eine Möglichkeit aufzuzeigen, die es auch in Java gibt, sofern es so etwas überhaupt in Java gibt.

cu
Ford Prefect


for? while? Wir sind hier doch nicht bei einer anweisungsorientierten Programmiersprache.
:finger:

In Java kannst du die extrem graziösen Enummerationen verwenden.
:cool:


Schätze, so etwas gibt es in Java nicht. In den ganzen Beispielen in der Doku wird auch

for (int i = 0; i < a.length; i++) //Zugriff auf a[ i ]
verwendet.

Wegen php: also ich finde

foreach ($bar as $foo)

bzw.

foreach ($bar as $key => $val)

viel lesbarer als

while ($foo = each($bar))

Naja, wohl Geschmackssache.


Frank, na dann lass mal hören! :slight_smile:

Dass ich while nutze ist eher historisch bedingt (ich wollte foreach, hab in der doku dann aber each() zuerst gefunden :wink:


Ups, muss wohl der Schlafentzug gewesen sein… ein while braucht man immer noch, ohne Kontrollstrukturen funzt auch keine oo-Programmiersprache.
Ausserdem sind Enumeratoren (genauso wie Iteratoren) nur bei Collections (also Vektoren, Hashtables, Listen usw.) implementiert und nicht für Arrays selber.
Also, passt eigentlich nicht ganz, aber was solls. :wink:

Funktioniert so:


import java.util.Enumeration;
import java.util.Vector;

(...)


		Vector v = new Vector(100);
		Enumeration enum = v.elements();
		
		v.addElement("1");
		v.addElement("2");
		v.addElement("3");
		v.addElement("4");
		v.addElement("5");
		
		while(enum.hasMoreElements()) {
			 System.out.println(enum.nextElement());
		}

Ganz hübsch sieht das auch mit ArrayList-en und einem Iterator aus

import java.util.Iterator;
import java.util.ArrayList;

(...)
		ArrayList a = new ArrayList(100);

		a.add("1");
		a.add("2");
		a.add("3");
		a.add("4");
		a.add("5");

		Iterator i = a.iterator();

		while(i.hasNext()) {
			 System.out.println(i.next());
		}

Aus einem mir nicht bekannten Grund muss man den Iterator hier nach der letzten Änderung an a konstruieren, sonst wird ein Fehler geworfen.