ListIterator über mehrere Arrays

Robokopp

Bekanntes Mitglied
Hallo,
ist es möglich, über mehrere Arrays in ein und der selben Schleife zu iterieren? Mir ist nicht ganz klar, wie das mit dem hasNext() prüfen funktionieren soll und wie ich mehr als 3 Argumente in die for-Schleife einbauen kann.

Zum Anwendungsfall:

Ich hab ein Skelett programmiert, welches ich animieren möchte.
Dazu wollte ich für jedes Gelenk eine Vielzahl von Winkelwerten in einem Array speichern und dann auslesen.
 

pl4gu33

Top Contributor
Wenn ich das richtig verstehe hast du z.b. 3 Arrays und willst in einer For- Schleife alle behandeln?

dann könntest du z.b.

Code:
for(int i=0;i< längstesArray....;i++){
...
}

und dann für die restlichen immer mit if(...) prüfen, ob es noch in dem Arraybereich ist oder schon außerhalb und je nachdem dann die Werte rausziehen
 

Robokopp

Bekanntes Mitglied
das war jetzt auf die For- Schleife bezogen :)

ja aber normalerweise mach ich das immer so:

Java:
for(ListIterator<Integer> element = bodyangle.listIterator(); element.hasNext();){
			Integer i = element.next();	
			}

Aber gut, so wie du es vorgeschlagen hast geht es auch und vorallem funktioniert es bei mehreren Arrays dann über den Index =)
In diesem Sinne, danke
 

freez

Top Contributor
Ich würde dir folgendes vorschlagen:
temporäre Liste erstellen und die Arrays hinzufügen. Dann über diese Liste iterieren:
Java:
		String [] strings1 = {"Hallo", "Ballo"};
		String [] strings2 = {"Hello", "World"};
		
		List <String>l = new ArrayList<String>();
		
		l.addAll(Arrays.asList(strings1));
		l.addAll(Arrays.asList(strings2));
		
		Iterator <String>it = l.iterator();
		while(it.hasNext())
			System.out.println(it.next());

Oder willst du die Arrays parallel bearbeiten? Dann würde ich versuchen sicherzustellen, dass die Arrays gleich lang sind und mit dem Standard vorgehen:
Java:
for(int i = 0; i <array1.length; i++){
    System.out.println(array1[i]);
    System.out.println(array2[i]);
}

Willst du unterschiedliche Längen wird es kompliziert.
 
Zuletzt bearbeitet:

Robokopp

Bekanntes Mitglied
Ich habe wenn mich nicht alles täuscht derzeit 11 Gelenke, die sich über Winkelradien ansprechen lassen.

Damit "er"^^ sich einigermaßen natürlich verhält, möchte ich pro Schleifendurchlauf für jedes Gelenk einen Winkelwert auslesen und die Figur damit berechnen.

Aus dem Grund kommen verschachtelte Schleifen leider nicht in Frage.

Edit:

Das mit der temporären Liste halte ich irgendwie für unnötig in meinem Fall.
Ich hab das jetzt mit einer for-Schleife gelöst und greife über den Index zu. Dann muss ich halt entweder zusehen, dass die Arrays immer gleich lang sind oder wie pl4gu33 schon sagte, innerhalb der for-Schleife nochmal prüfen, ob die jeweiligen Arrays noch Elemente enthalten :) wobei letzteres wahrscheinlich sinnvoller ist, man weiß ja nie
 
Zuletzt bearbeitet:

Landei

Top Contributor
Mal als Idee:

Java:
import java.util.*;

public class AppendIterable<T> implements Iterable<T> {

    private final List<Iterable<T>> iterables = new ArrayList<Iterable<T>>();

    public AppendIterable(Iterable<T> iterable) {
        iterables.add(iterable);
    }

    public AppendIterable(T ... ts) {
        iterables.add(Arrays.asList(ts));
    }

    public AppendIterable<T> and(Iterable<T> iterable) {
        iterables.add(iterable);
        return this;
    }

    public AppendIterable<T> and(T ... ts) {
        iterables.add(Arrays.asList(ts));
        return this;
    }

    @Override
    public Iterator<T> iterator() {
        return new Iterator<T>() {
            private int index = 0;
            private Iterator<T> it = iterables.isEmpty()
                    ? null
                    : iterables.get(index).iterator();

            @Override
            public boolean hasNext() {
                if (it == null) {
                    return false;
                } else if (it.hasNext()) {
                    return true;
                } else {
                    index++;
                    it = index < iterables.size() ? iterables.get(index).iterator() : null;
                    return hasNext();
                }
            }

            @Override
            public T next() {
                if (hasNext()) {
                    return it.next();
                } else {
                    throw new NoSuchElementException();
                }
            }

            @Override
            public void remove() {
                throw new UnsupportedOperationException();
            }
        };
    }
}

Anwendung:

Java:
List<String> list = new ArrayList<String>();
list.add("foo");
list.add("bar");
AppendIterable<String> strings = new AppendIterable<String>("bla","laber").and(list).and().and("sülz").and(list);
for(String s : strings) {
     System.out.println(s);
}

Code:
bla
laber
foo
bar
sülz
foo
bar

Man beachte, dass das flexibler ist als eine Lösung, wo man einfach alles in eine einzige Liste packt, weil ja nicht gesagt ist, dass jeder Teil-Iterator auch wirklich terminiert, bzw. das Auslesen eines Iterators sehr lange dauern kann, obwohl vielleicht am Ende die Schleife vorzeitig verlassen wird.

[edit]
Ach, ich sehe gerade, dass du anscheinend doch "parallel" über die Arrays iterieren willst. Ich lasse es trotzdem mal stehen...
[/edit]
 
Zuletzt bearbeitet:

Robokopp

Bekanntes Mitglied
Mal als Idee:

Java:
import java.util.*;

public class AppendIterable<T> implements Iterable<T> {

    private final List<Iterable<T>> iterables = new ArrayList<Iterable<T>>();

    public AppendIterable(Iterable<T> iterable) {
        iterables.add(iterable);
    }

    public AppendIterable(T ... ts) {
        iterables.add(Arrays.asList(ts));
    }

    public AppendIterable<T> and(Iterable<T> iterable) {
        iterables.add(iterable);
        return this;
    }

    public AppendIterable<T> and(T ... ts) {
        iterables.add(Arrays.asList(ts));
        return this;
    }

    @Override
    public Iterator<T> iterator() {
        return new Iterator<T>() {
            private int index = 0;
            private Iterator<T> it = iterables.isEmpty()
                    ? null
                    : iterables.get(index).iterator();

            @Override
            public boolean hasNext() {
                if (it == null) {
                    return false;
                } else if (it.hasNext()) {
                    return true;
                } else {
                    index++;
                    it = index < iterables.size() ? iterables.get(index).iterator() : null;
                    return hasNext();
                }
            }

            @Override
            public T next() {
                if (hasNext()) {
                    return it.next();
                } else {
                    throw new NoSuchElementException();
                }
            }

            @Override
            public void remove() {
                throw new UnsupportedOperationException();
            }
        };
    }
}

Anwendung:

Java:
List<String> list = new ArrayList<String>();
list.add("foo");
list.add("bar");
AppendIterable<String> strings = new AppendIterable<String>("bla","laber").and(list).and().and("sülz").and(list);
for(String s : strings) {
     System.out.println(s);
}

Code:
bla
laber
foo
bar
sülz
foo
bar

Man beachte, dass das flexibler ist als eine Lösung, wo man einfach alles in eine einzige Liste packt, weil ja nicht gesagt ist, dass jeder Teil-Iterator auch wirklich terminiert, bzw. das Auslesen eines Iterators sehr lange dauern kann, obwohl vielleicht am Ende die Schleife vorzeitig verlassen wird.

[edit]
Ach, ich sehe gerade, dass du anscheinend doch "parallel" über die Arrays iterieren willst. Ich lasse es trotzdem mal stehen...
[/edit]

Gut, aber da hätte ich dann wahrscheinlich Probleme, die Werte die ich rausbekomme, den einzelnen Variablen zuzuweisen...außer ich gehe wieder über die Indices der Werte des Ergebnisses.
Bsp:
halswinkel=bla;
bodywinkel=laber;
die Werte müssen wirklich zugewiesen werden, denn ich hab für jedes Gelenk eine andere Funktion, da sie wiederum in Abhängigkeit zu anderen Gelenken stehen
usw...ich glaub da verstrick ich mich nur unnötig
 

Robokopp

Bekanntes Mitglied
Naja, hätte ich machen können. Ich hab mir überlegt, ob ich jedes Gelenk als Objekt instanziieren soll, hab mich dann jedoch dazu entschieden das Skellet als ganzes zu definieren, weil es so für mich am einfachsten erschien
 

Landei

Top Contributor
Anscheinend hat ein Gelenk genug Eigenständigkeit für ein Objekt. Du solltest zwar alles so einfach wie möglich machen, aber nicht einfacher :)
 

Robokopp

Bekanntes Mitglied
Klar, aber abstrahieren kann ich später immer noch. Ich war froh als endlich alle Winkel richtig berechnet wurden und da hab ich noch nicht an Objekte gedacht :D

Das ganze hat auch noch keinen richtigen Verwendungszweck, mir ging es eher um den Probier-Faktor
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Collections ListIterator gibt Inhalt von ArrayList nicht aus Allgemeine Java-Themen 3
F ListIterator (next & previous methoden) Allgemeine Java-Themen 5
deetee ListIterator implementieren Allgemeine Java-Themen 3
E Einfache Frage zu ListIterator Allgemeine Java-Themen 10
kodela Datenübergabe über Buttons Allgemeine Java-Themen 8
W Jar-File Start nur über Terminal Allgemeine Java-Themen 13
A ByteArray über Socket Allgemeine Java-Themen 3
berserkerdq2 Text über einen Shape anzeigen (Scenebuilder) Allgemeine Java-Themen 1
I 2D-Grafik Vektor-Grafik über die Zwischenablage nach Adobe Illustrator transferieren Allgemeine Java-Themen 8
TheSkyRider Methode über DataInputStream "auslösen" Allgemeine Java-Themen 6
I OpenPDF erzeugt riesige PDFs, wenn Grafiken über PdfGraphics2D#drawImage gezeichnet werden Allgemeine Java-Themen 1
T Etikettendrucker über TCP-IP Allgemeine Java-Themen 1
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
Master3000 Java Konsole über Buffered Reader Zeilenweise auslesen ? Allgemeine Java-Themen 26
J Daten über serielle Schnittstelle empfangen Allgemeine Java-Themen 4
L Aufwandsabschätzung: Android-App Aufnahmefunktion (foto) und zweiter Ebene über dem Foto (teiltransparent) Allgemeine Java-Themen 6
M Registry Autostart Eintrag mit Java erstellen (über Windows cmd) Allgemeine Java-Themen 7
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
J Namen von Methoden über Reguläre Ausdrücke bearbeiten Allgemeine Java-Themen 6
M Schnelleres Speichern von XML-Daten über URLConnection Allgemeine Java-Themen 4
M Keine weitere Eingabe in der Main möglich. Eventueller Ansatz über while. Allgemeine Java-Themen 8
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
W Variablenübergabe über mehrere Klassen Allgemeine Java-Themen 4
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M Threads über Kommandozeile Allgemeine Java-Themen 5
david19 Software AE über Domain laufen lassen Allgemeine Java-Themen 0
Q Selbständig ActionEvent auslösen zum Daten senden über serielle Schnittstelle Allgemeine Java-Themen 7
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
K Auf Dateiverzeichnis extern zugreifen (evtl über XML??) Allgemeine Java-Themen 22
C VisualVM oder Jconsole über Jolokia-Proxy Allgemeine Java-Themen 0
G USB-Pins über Java ansteuern Allgemeine Java-Themen 8
Ernesto95 Best Practice Localization über ResourceBundle Allgemeine Java-Themen 6
C Classpath Neue Klasse über einen Button ausführen Allgemeine Java-Themen 3
C Auslesen auslösen über Button-Click Allgemeine Java-Themen 8
M Fragen beantworten über Textfeldeingabe Allgemeine Java-Themen 5
AssELAss Best Practice Checksumme über jede Spalte zweier Tabellen und vergleichen Allgemeine Java-Themen 3
T Strings über Bluetooth zwischen PC,µc oder Samrtphone senden und empfangen Allgemeine Java-Themen 0
F Try/catch über ganze Klasse Allgemeine Java-Themen 9
kodela Eigenartige Datumsberechnung über GregorianCalendar Allgemeine Java-Themen 15
HarleyDavidson Best Practice Integer-Zahlenfolge über mehrere Programmstarts Allgemeine Java-Themen 7
T .jar über cmd ausführen (später dann batch) Allgemeine Java-Themen 6
F In OSX: Java-Programm über URI-Scheme aufrufen mit Parameter? Allgemeine Java-Themen 0
C Input/Output Zip Files über Socket senden und empfangen Allgemeine Java-Themen 6
M WebService - Zugriff auf Webservice Methode über Browser Allgemeine Java-Themen 1
C .jar File lässt sich nur über Konsole öffnen Allgemeine Java-Themen 1
L Videodateien über Java öffnen unabhängig vom Format Allgemeine Java-Themen 4
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
A Threads Lock über mehrere Abschnitte in verschiedenen Methoden Allgemeine Java-Themen 5
T Daten über port abfangen mit proxy server Allgemeine Java-Themen 12
M Eingabe von Arrays geht über gewünschte Anzahl hinaus Allgemeine Java-Themen 2
L Prüfen, ob Programm über 32bit oder 64bit Java ausgeführt wird Allgemeine Java-Themen 4
F Content-Disposition ermitteln über URL Allgemeine Java-Themen 2
ARadauer Checksumme über BigDecimal Werte Allgemeine Java-Themen 11
A Class Datei aus Verzeichnis über URLClassLoader laden Allgemeine Java-Themen 2
G Darstellung von Ergebnissen einer Dokumentensuche über eine JTable Allgemeine Java-Themen 19
S VLC + Lied über Java starten Allgemeine Java-Themen 17
M HTML-Code von Webseite über Browser oder Console auslesen?? Allgemeine Java-Themen 5
A Sinuston ausgeben und über Mikro Amplitude messen – machbar? Allgemeine Java-Themen 6
R Java-Progamm über Icon starten unter Windows Allgemeine Java-Themen 9
C Daten über URL an PHP verschicken Allgemeine Java-Themen 4
O Fragen über Fragen - Bei Änderung XML-Datei -> Anpassung GUI Allgemeine Java-Themen 7
aze Jar ausführen über Runtime.execute funktioniert nicht Allgemeine Java-Themen 4
S NoSuchMethodError beim Ausführen einer C Methode über JNI Allgemeine Java-Themen 5
H OOP Daten über TCP Allgemeine Java-Themen 5
Pastafari Iterator über nested HashMaps Allgemeine Java-Themen 7
G Interface Laden der Konfiguration über Interfaces sinnvoll? Allgemeine Java-Themen 28
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
B VoIP-Gespräche über Computer führen Allgemeine Java-Themen 3
S Jar-File startet nicht über doppelklick Allgemeine Java-Themen 2
C Java Programm über SSH starten Allgemeine Java-Themen 16
K Internetverbindung über PuTTy herstellen?! Allgemeine Java-Themen 9
C Kapselung Warum graift man auf Variablen nur über Methoden und nich direkt zu? Allgemeine Java-Themen 10
G Auf Kommandozeile über Processobjekt mit Outputstream Allgemeine Java-Themen 3
S Input/Output Binärdatei über Bytestreams Allgemeine Java-Themen 4
S Kommunikation von Core und GUI über Schnittstellen Allgemeine Java-Themen 2
J Explorer über Code starten Allgemeine Java-Themen 15
kodela Problem mit Kopieren über FileChannel Allgemeine Java-Themen 4
L Java und Javascript um Distanz über Google Maps zu berchnen Allgemeine Java-Themen 10
B UNIX Shell befehl über JavaCode ausführen Allgemeine Java-Themen 19
D Java Excel API - Schreiben in Excel lässt sich nicht über Makro starten Allgemeine Java-Themen 18
M Ampelsteuerung über Timer in Java realisieren Allgemeine Java-Themen 3
L CMD über Java öffnen Allgemeine Java-Themen 8
U Mailclient über getDesktop.mail vorbereiten, Problem beim Anhang: Allgemeine Java-Themen 3
R Klasse über Button Event in anderer Klasse informieren Allgemeine Java-Themen 11
R Frequenzausgabe (2 Kanal) über Lautsprecherausgang Allgemeine Java-Themen 22
J Java-Klasse über Konsole starten Allgemeine Java-Themen 6
E FF Einstellungen über Programm ändern? Allgemeine Java-Themen 7
D JVM kann nicht über die jvm.dll gestartet werden? Allgemeine Java-Themen 1
S File im windowexploer öffnen über java Allgemeine Java-Themen 6
J Receive eines Hex-Bytes über COM-Port Allgemeine Java-Themen 4
Nicer Prozess über Prozessnamen beenden Allgemeine Java-Themen 15
reibi File über FileChannel locken Allgemeine Java-Themen 5
B Serialisierung mit Unterobjekten über Netzwerk Allgemeine Java-Themen 3
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
B parallele / Multithreaded Iteration über Map Allgemeine Java-Themen 12
D Unix/Linux Benutzer-Authentifikation über Java Allgemeine Java-Themen 3
M Tastatur eingabe über Buttons Allgemeine Java-Themen 15

Ähnliche Java Themen

Neue Themen


Oben