Eigener Iterator soll mehrdimensionales Array durchlaufen

werdas34

Bekanntes Mitglied
Hallo,

ich habe eine Aufgabe (siehe Bild).
Im grunde gehts darum einen Iterator zu schreiben der die Zahlen einen mehrdimensionalen Arrays ausgibt und selbständig erkennt wann ein Array endet. Dann muss er gegebenfalls in den nächsten springen.
Mein Code:
Java:
import java.util.Iterator;

public class IterableArrays implements Iterable<Integer> {
    private final int[][] arrays;

    public IterableArrays(int[]... arrays) {
        this.arrays = arrays;
    }

    @Override
    public Iterator<Integer> iterator() {
        return new IntIterator();
    }

    private class IntIterator implements Iterator<Integer> {
        private int indexArr = 0;
        private int indexCurrentElement = 0;

        private void findNext() {
            if (this.hasNext()) {
                if (arrays[indexArr].length < arrays.length) {
                    indexArr++;
                    indexCurrentElement = 0;
                }
            }
        }

        @Override
        public boolean hasNext() {
            return indexCurrentElement < arrays[indexArr].length;
        }

        @Override
        public Integer next() {
            findNext();
            return arrays[indexArr][indexCurrentElement++];
        }

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

    }
}
Main:
Java:
import java.util.Iterator;

public class Main {

    public static void main(String[] args) {
        int[][] arr =
            { { 1, 9, 4 },
              { 0, 2},
              { 0, 1, 2, 3, 4 } };
       
        IterableArrays it = new IterableArrays(arr);
        Iterator<Integer> iter = it.iterator();
       
        while(iter.hasNext()) {
            System.out.println(iter.next());
        }
    }

}

Momentan wird nur die erste Zeile ausgeben also:
1
9
4

Nur ich finde irgendwie meinen Fehler grad nicht.
Wäre super wenn mir jemand hilft.

Danke
mfg werdas34
 

Anhänge

  • Unbenannt.PNG
    Unbenannt.PNG
    41,3 KB · Aufrufe: 35

httpdigest

Top Contributor
Folgt zwar nicht exakt der Aufgabe, aber...
Java:
import java.util.*;
public class IterableArrays implements Iterable<Integer> {
  private final int[][] arrays;
  public IterableArrays(int[]... arrays) {
    this.arrays = arrays;
  }
  @Override
  public Iterator<Integer> iterator() {
    return Arrays.stream(arrays).flatMapToInt(Arrays::stream).iterator();
  }
}
Ansonsten ist bei dir der Fehler, dass du in hasNext() nur auf das aktuelle Array und dessen Länge guckst und nicht prüfst, ob (wenn das Array erschöpft ist), du vielleicht noch mehr arrays hast.
 

werdas34

Bekanntes Mitglied
Danke für deine Antwort.
Ich würde dennoch gerne die Aufgabe aufgabengerecht lösen - Prüfung...

Habe jetzt bisschen rumprobiert. Also momentan siehts so aus:
Java:
        @Override
        public boolean hasNext() {
            if(indexCurrentElement < arrays[indexArr].length) {
                return true;
            }
            if(arrays[indexArr].length < arrays.length) {
                return true;
            }
            return false;
        }
Ausgabe ist das selbe wie oben.

Also entweder bin ich grad zu dumm dafür oder mein Gehirn hat mittlerweile keine Lust mehr. Ich schaue morgen nochmal drüber schauen.
Würde mich dennoch über Tipps freuen.

mfg werdas34
 

httpdigest

Top Contributor
Effektiv brauchst du eigentlich eine while/for Schleife, um das nächste wirkliche Array-Element zu finden. Bedenke, dass Arrays auch leer sein können und du somit solange Arrays prüfen musst, bis du ein wirkliches Element gefunden hast, das der Iterator als nächstes zurückliefern kann.

Hier ist eine mögliche funktionierende Lösung (bitte erst vorher selber probieren!):
Java:
private class IntIterator implements Iterator<Integer> {
  private int indexArr;
  private int indexCurrentElement = -1;
  private boolean hasNext = proceed();
  private boolean proceed() {
    // Gehe im aktuellen Array eine Position weiter
    indexCurrentElement++;
    // Solange wie noch Arrays übrig sind...
    while (indexArr < arrays.length) {
      // Prüfe, ob das aktuelle Array noch Element hat
      if (indexCurrentElement >= arrays[indexArr].length) {
        // Nein, es ist erschöpft. Gehe zum nächsten Array.
        indexArr++;
        indexCurrentElement = 0;
      } else {
        // Ein nächstes Element wurde gefunden
        return true;
      }
    }
    // Alle Arrays wurden iteriert
    return false;
  }
  @Override
  public boolean hasNext() {
    return hasNext;
  }
  @Override
  public Integer next() {
    if (!hasNext)
      throw new NoSuchElementException();
    try {
      return arrays[indexArr][indexCurrentElement];
    } finally {
      hasNext = proceed();
    }
  }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Eigener Iterator für LinkedList Java Basics - Anfänger-Themen 20
H String verschlüsseln - eigener Algorithmus Java Basics - Anfänger-Themen 104
D importieren eigener Klassen Java Basics - Anfänger-Themen 12
W Dez-->Binär mit eigener bit Anzahl Erkennung. Java Basics - Anfänger-Themen 3
N ArrayList in eigener Klasse erzeugen mit Zugriff Java Basics - Anfänger-Themen 7
B Eigener Validierungseditor? Java Basics - Anfänger-Themen 3
Bluedaishi Jar mit eigener JRE Java Basics - Anfänger-Themen 7
I equals (Override) mit eigener Exception (keine Runtime-Exception) Java Basics - Anfänger-Themen 9
J Threads Problem mit eigener ArrayList Java Basics - Anfänger-Themen 2
E MCLauncher eigener Client workt nicht? Java Basics - Anfänger-Themen 4
A Input/Output Datenströme schließen in eigener Methode Java Basics - Anfänger-Themen 5
J Interface ActionListener in eigener Klasse Java Basics - Anfänger-Themen 27
F Get/Post als eigener Thread mit Rückgabe Java Basics - Anfänger-Themen 5
M Messandwendung nach Zeit und eigener Eingabe Java Basics - Anfänger-Themen 4
N Schlüsselworte Bubble Sort nach eigener Ordnung Java Basics - Anfänger-Themen 8
E Compare-Funktion bei eigener Klasse Java Basics - Anfänger-Themen 4
Q ArrayList mit eigener Klasse in Java sotieren Java Basics - Anfänger-Themen 2
N BierSpiel von "Kopf bis Fuss" eigener Code...kleine Problemstellung. Java Basics - Anfänger-Themen 11
C OOP Erstellen eigener Objekte die es schon gibt "schlau"? Java Basics - Anfänger-Themen 3
V Arrays aus eigener Klasse erstellt, zuweisung aber spuckt Fehler in verbindung mit main Methode aus. Java Basics - Anfänger-Themen 3
L Eigener FilterReader Java Basics - Anfänger-Themen 12
E Mein eigener Listener (Hilfe gesucht) Java Basics - Anfänger-Themen 2
M import von eigener Klasse Java Basics - Anfänger-Themen 12
P ArrayList aus eigener Klasse "überschreibt" Werte nicht Java Basics - Anfänger-Themen 4
M xPos und yPos eigener Klassen geben lassen Java Basics - Anfänger-Themen 3
H Exit Befehl in eigener Konsole Java Basics - Anfänger-Themen 9
S Eigener InputStream, Hilfe bei read-Methode Java Basics - Anfänger-Themen 6
S Überladener Konstruktor und aufruf aus eigener Klasse Java Basics - Anfänger-Themen 2
D Klassen Problem mit Eigener Array-Klasse Java Basics - Anfänger-Themen 10
S [JUnit] eigener Testsuite Runner + Ausgabe Java Basics - Anfänger-Themen 6
G Eigener Autoboxing Datentyp Java Basics - Anfänger-Themen 3
M Eigener InputStream will nicht mit BufferedReader Java Basics - Anfänger-Themen 3
B Datentypen Probleme mit eigenem Get() bei eigener HashMap Java Basics - Anfänger-Themen 6
B OOP Eigener Event-Listener erstellen Java Basics - Anfänger-Themen 4
G Datentypen "Liste" eigener Objekte durchsuchen Java Basics - Anfänger-Themen 6
S mit eigener Klasse JTextField ändern Java Basics - Anfänger-Themen 3
N Vektor mit eigener Datenstruktur sortieren Java Basics - Anfänger-Themen 20
I Datentypen Eigener DatenTyp Java Basics - Anfänger-Themen 2
B Ordner öffnen (eigener Dateibrowser) Java Basics - Anfänger-Themen 8
B Eigener Webserver + Eigener Webbrowser Java Basics - Anfänger-Themen 7
I eigener "Abstandshalter" vs. LayoutManager Java Basics - Anfänger-Themen 6
X eigener Mergesort auf generischen Typen mit Comparator Java Basics - Anfänger-Themen 6
K Sinn eigener Exceptions Java Basics - Anfänger-Themen 11
D Container mit eigener Klasse Java Basics - Anfänger-Themen 5
B Verwenden eigener Object-Klassen Java Basics - Anfänger-Themen 9
H Eigener Button Java Basics - Anfänger-Themen 2
I Java eigener MSN Messenger schreiben Java Basics - Anfänger-Themen 3
R Event in eigener Klasse implementieren ? Java Basics - Anfänger-Themen 8
G Fortlaufende Aktualisierung bei eigener Klasse Java Basics - Anfänger-Themen 2
G IOException Problem in eigener Klasse Java Basics - Anfänger-Themen 8
B Import Problem mit eigener Klasse. Java Basics - Anfänger-Themen 8
G Eigener Parser Java Basics - Anfänger-Themen 4
T Problem mit eigener Klasse Java Basics - Anfänger-Themen 7
A eigener Explorer via Java? Java Basics - Anfänger-Themen 9
D Thread und Process Kommunikation bei eigener Console Java Basics - Anfänger-Themen 2
T Öffnen externer Datei als eigener Prozess Java Basics - Anfänger-Themen 8
G Datei aus eigener JAR-Datei verwende Java Basics - Anfänger-Themen 2
N Porblem mit dem Importieren eigener Pakete Java Basics - Anfänger-Themen 4
T ActionListener in eigener Klasse Java Basics - Anfänger-Themen 10
T ActionListener in eigener Klasse Java Basics - Anfänger-Themen 5
L ActionListener in eigener Klasse Java Basics - Anfänger-Themen 3
T Erstellen eigener packages Java Basics - Anfänger-Themen 6
G JMenuBar in eigener Klasse erstellen Java Basics - Anfänger-Themen 3
A Eigener Datentyp? Java Basics - Anfänger-Themen 39
F Eigener IP-Paket-Header Java Basics - Anfänger-Themen 15
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
N Kann man einen Iterator nur einmal verwenden Java Basics - Anfänger-Themen 5
N Warum Springt iterator nur in der Schleife weiter Java Basics - Anfänger-Themen 9
volcanos HashSet und Iterator -> Falsche Sortierreihenfolge ? Java Basics - Anfänger-Themen 18
J Methoden Die Reihenfolge der Iterator-Elemente umkehren Java Basics - Anfänger-Themen 3
J Methoden iterator for-schleife (hasNext() ) Java Basics - Anfänger-Themen 7
Stargirlxo Iterator + Methode Java Basics - Anfänger-Themen 10
G Java Listen und Iterator Java Basics - Anfänger-Themen 2
U Hashmap Iterator selbst implementieren Java Basics - Anfänger-Themen 10
F nur das erste Element mit iterator ausgeben Java Basics - Anfänger-Themen 5
O Iterator erneut! Java Basics - Anfänger-Themen 8
O Iterator für eine geordnete Menge Java Basics - Anfänger-Themen 134
J Doppelte Ausgabe erzeugen Iterator Java Basics - Anfänger-Themen 6
K Iterator zurückliefern Java Basics - Anfänger-Themen 8
S Iterator einer Liste Java Basics - Anfänger-Themen 4
B Sortieren mit Iterator Java Basics - Anfänger-Themen 4
I Erste Schritte Iterator Java Basics - Anfänger-Themen 3
M Iterator funktioniert nicht Java Basics - Anfänger-Themen 5
M Iterator cannot refer to a non final... Java Basics - Anfänger-Themen 20
O Interface Iterator Java Basics - Anfänger-Themen 2
M Collections Frage Beispielprogrammierung Iterator Java Basics - Anfänger-Themen 13
M Iterator Java Basics - Anfänger-Themen 25
J Iterator Funktioniert nicht richtig in StackImplementierung Java Basics - Anfänger-Themen 3
Z Hashmap Iterator löscht nicht Java Basics - Anfänger-Themen 8
L Iterator Java Basics - Anfänger-Themen 1
K Nutzung einer Klasse die das Iterator-Interface implementiert Java Basics - Anfänger-Themen 0
K Iterator-Interface implementieren mit Exception Handlung Java Basics - Anfänger-Themen 1
M Collections Iterator und generischer Baum Java Basics - Anfänger-Themen 0
O Kleine Frage zu Iterator und Iterable Java Basics - Anfänger-Themen 6
OnDemand Iterator Interfacve Java Basics - Anfänger-Themen 23
S Iterator next() Nullpointer Java Basics - Anfänger-Themen 2
T Methoden Iterator über ArrayList Java Basics - Anfänger-Themen 3
W Iterator Java Basics - Anfänger-Themen 2
D Aufgabe: Stack mit Iterator Java Basics - Anfänger-Themen 8
R Mit iterator auf Element zugreifen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben