erweiterte For Schleife rückwandeln

K0alabear

Neues Mitglied
Hallo 🙂

Ich habe da ein Problem ich habe vor mir eine erweiterte For-Schleife aber bekomme diese nicht umgeschrieben in eine Normale. ich möchte diese verstehen aber bekomme es einfach nicht hin.


Java:
public void ungroupFigures() {
		
		// Figuren der ausgewaehlte Gruppe werden erneut einzeln platziert.
		if (group != null) {
			for (Node node : group.getChildren()) {
				actualFigure = (Figure) node;
				actualFigure.setSelect(false);
				myPanel.getChildren().add((Node) actualFigure);
			}
			groupSelected = false;
			group = null;

Vielen Dank schonmal falls jemand helfen kann 🙂
 
Zuletzt bearbeitet:
Hi K0alabear,

Du kannst vor der for schleife eine Zeile haben wie
Java:
NodeList children = group.getChildren();
Die NodeList hat nun die Anzahl der Elemente und Du kannst diese mit der Nummer aufrufen. Somit ist eine for-Schleife möglich um diese einzelnd durchzugehen.

Mit den besten Grüßen,

Konrad
 
Du kannst einfach

Java:
    public void ungroupFigures() {
           
            // Figuren der ausgewaehlte Gruppe werden erneut einzeln platziert.
            if (group != null) {
                for (int i = 0; i < group.getChildren().size(); i++) {
                    actualFigure = (Figure) group.getChildren().get(i);
                    actualFigure.setSelect(false);
                    myPanel.getChildren().add((Node) actualFigure);
                }
                groupSelected = false;
                group = null;

schreiben (hab ich jetzt nicht getestet sollte aber funktionieren - das was kneitzel gesagt, nur mit Code).
 
Das Vorgehen mit einer Zählschleife und get(i) ist im Allgemeinen eine schlechte Idee. Grund: Bei vielen Datenstrukturen dauert der Zugriff auf ein Element eine gewisse Zeit. In einer LinkedList der Größe n muss zum Zugriff auf das zweite Element erstmal das erste angeschaut werden, denn dort ist die Referenz zum zweiten Element enthalten. Zum Zugriff auf das dritte Element muss nochmal von vorn angefangen werden.. zum Zugriff auf Element n sind dann sogar n Referenz-Verfolgungen nötig. Wenn du nun also eine Schleife hast, die eine LinkedList von i = 1 bis n durchläuft, dann werden intern 1 / 2 * n * (n + 1) Zugriffe durchgeführt, du hast also eine quadratische Laufzeitkomplexität.

Der richtige Weg, den auch die for-each-Schleife macht, ist die Benutzung eines Iterators. Den besorgt man sich über die Methode iterator(). Mit hasNext() auf dem Iterator kann man schauen, ob noch ein Element vorhanden ist, und falls ja, mit next() darauf zugreifen. Der Iterator speichert intern das aktuelle Element der Liste und kann deshalb direkt auf das nächste Element zugreifen, dadurch hätte man im obigen Beispiel eine lineare Laufzeitkomplexität.

Hier ein kleines Beispiel:
Java:
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

public class Listing {
    public static void main(String[] args) {
        List<String> list = new LinkedList<>();
        list.add("Kappa");
        list.add("Xi");
        list.add("Theta");

        for(Iterator<String> i = list.iterator(); i.hasNext(); ) {
            System.out.println(i.next());
        }
    }
}
 
Zuletzt bearbeitet:

Zurück
Oben