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:
importjava.util.Iterator;publicclassMain{publicstaticvoidmain(String[] args){int[][] arr ={{1,9,4},{0,2},{0,1,2,3,4}};IterableArrays it =newIterableArrays(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.
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.
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.
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:
privateclassIntIteratorimplementsIterator<Integer>{privateint indexArr;privateint indexCurrentElement =-1;privateboolean hasNext =proceed();privatebooleanproceed(){// 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 hatif(indexCurrentElement >= arrays[indexArr].length){// Nein, es ist erschöpft. Gehe zum nächsten Array.
indexArr++;
indexCurrentElement =0;}else{// Ein nächstes Element wurde gefundenreturntrue;}}// Alle Arrays wurden iteriertreturnfalse;}@OverridepublicbooleanhasNext(){return hasNext;}@OverridepublicIntegernext(){if(!hasNext)thrownewNoSuchElementException();try{return arrays[indexArr][indexCurrentElement];}finally{
hasNext =proceed();}}}