Datenstrukturen & Algorithmen => Iteratoren

Status
Nicht offen für weitere Antworten.

brasilian

Aktives Mitglied
Hallo,

ich hab gerade in der "Insel", dass Kapitel 11 (Datenstrukturen & Algorithmen) gelesen und muß sagen, dass ich vom Verständnis her, dort noch nicht auf dem Maximum bin. Ich wollte versuchen die erste Übungsaufgabe zu lösen, und dann mit "Learing by Doing" meine Kenntnisse zu verbessern.

Ich will die Aufgabe mal flott posten, und meinen (kleinen) Lösungsansatz:

Implementiert man das Interface java.util.Enumeration, so lassen sich damit die Elemente einer Klasse der Reihe nach aufzählen. Implementiere eine Klasse Quadratic, die Quadratzahlen bis kleiner 1000 liefert. Der Zugriff dabei soll mittels nextElement() erfolgen. hasMoreElements() darf nur so lange true sein, bis die Werte tatsächlich kleiner 1000 sind. Wie wird das Ende angezeigt, falls wir doch noch einen Wert herausholen wollen, dies aber überhaupt nicht erlaubt ist?

Ich hätte kein Problem dies mit einem "normalen" Array zu realisieren und über eine for-Schleife zu gehen, doch mit der Möglichkeit der Iteratoren bin ich noch nicht so vertraut :(.

Soviel ich weiß, muß ich erstmal die drei abstrakten Funktionen hasNext(), next() und remove() aus dem Iterator Interface überschreiben (Bitte korrigiert mich, wenn ich in meinen Annahmen falsch liege).

Dies hab ich so versucht:

Code:
import java.util.*;

public class quad1000 implements Iterator
{
  private Object array [];
  private int pos = 0;
  
  public quad1000 () // Konstruktor , hier ist das Problem
  {
    // Was kann ich hier machen :?: 
  }
  
  public boolean hasNext()
  {
    return pos < array.length;
  }
  
  public Object next() throws NoSuchElementException
  {
    if( hasNext() )
        return array[pos++];
    else
        throw new NoSuchElementException();
  }

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

Anschließend, hab ich dann die Testmethode geschrieben:

Code:
import java.util.*;

public class Quadtest
{
  static public void main (String args[])
  {
    int zahlen [] = new int [100];
    int temp;

    for(int a = 0 ; a <1000 ; a++)
    {
      temp =  (a * a);
      if (temp > 1000)
         break;
      else
         zahlen[a] = temp;
    }
    Iterator i = new quad1000  (); //  Das nächste Problem, wie schaff ich  es hier zum Konstruktor  :?: 
    
  }
}

Das Testprogramm ist noch nicht fertig, aber ich hab das Problem, es mit meiner Klasse zu verknüpfen.

Ich hoffe ihr könnt mir mit einer leicht verständlichen Antwort weiterhelfen.

Vielen Dank im Vorraus
 
B

bygones

Gast
mhm - komische aufgabenstellung ehrlich gesagt.. du könntest einfach ne Collection nehmen und die mit den Quadratzahlen füllen die hat ja schon die Möglichkeit eines Iterators... aber wenn du es selber machen willst.

ich würde die Klasse selber nicht einen Iterator implementieren lassen....
Code:
public class Quadzahlen {
   private Integer[] zahlen;

   public Quadzahlen(int max) {
    zahlen = new Integer[max];
    initZahlen();
   }

   private void initZahlen() {
    // hier generierst du dir die Quadratzahlen;
   }


   public Iterator iterator() {
    return new Iterator() { 
       int index = 0;

       public boolean hasNext() {
         return index < zahlen.length;
       }
   
       public Object next() {
         return zahlen[index++];
       }

       public void remove()  {
          throw new UnsupportedOperationException();
      } 
    }
}
d.h. implementiere den iterator als anonyme Klasse - damit ist man flexibler weil jeder aufruf von iterator(); eine neue Iteration ermöglicht
 

brasilian

Aktives Mitglied
Erstmal Danke für die schnelle Hilfe.

Ich habe mal deine Beispielcoding um die initZahlen() - Funktion erweitert.

Code:
public class Quadzahlen
{
   private Integer[] zahlen;
   private Integer temp;

   public Quadzahlen(int max)
   {
      zahlen = new Integer[max];
      initZahlen();
   }

   private void initZahlen()
   {
      // hier generierst du dir die Quadratzahlen;
      while(true)
      {
        temp =  (a * a);
        if (temp > 1000)
          break;
        else
          zahlen[a] = temp;
      }
   }

   public Iterator iterator()
   {
      return new Iterator()
      {
        int index = 0;

        public boolean hasNext()
        {
          return index < zahlen.length;
        }

        public Object next()
        {
          return zahlen[index++];
        }

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

Leider erhalte ich immer ne Fehlermeldung, das ein ";" fehlt :x
 
B

bygones

Gast
ups - mein Fehler:
Code:
public Iterator iterator() {
    return new Iterator() {
       int index = 0;

       public boolean hasNext() {
         return index < zahlen.length;
       }
   
       public Object next() {
         return zahlen[index++];
       }

       public void remove()  {
          throw new UnsupportedOperationException();
      }
    };
}
du musst die Anweisung new Iterator() {....} natürlich mit einem ; abschließen...

PS: BITTE kein while(true) verwenden !!
Code:
int index = 0;
while(index < 1000)  {
 zahlen[index] = index * index;
 index++;
}
 

brasilian

Aktives Mitglied
Okay, das Problem mit dem Semikolon ist behoben, hab aber jetzt zwei andere Fehlermeldungen.

Ich hab den Code nochmal überarbeitet:

Code:
public class Quadzahlen
{
   private Integer[] zahlen;


   public Quadzahlen(int max)
   {
      zahlen = new Integer[max];
      initZahlen();
   }

   private void initZahlen()
   {
      // hier generierst du dir die Quadratzahlen;
      int index = 0;
      while(index < 1000)
      {
        zahlen[index++] = new Integer (index * index);
      }
   }

   public Iterator iterator()  // Hier kommt die erste Fehlermeldung (cannot resolve Symbol)
   {
      return new Iterator()  // Und hier die zweite  (cannot resolve Symbol)
      {
        int index = 0;

        public boolean hasNext()
        {
          return index < zahlen.length;
        }

        public Object next()
        {
          return zahlen[index++];
        }

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


P.S: Was spricht gegen die Verwendung einer While(true)-Schleife, wenn ein Break vorhanden ist ?
 
B

bygones

Gast
du musst natürlich den Iterator importieren !!!
Code:
import java.util.Iterator;

ich weiß nicht ob es allgemeingültig ist mit der while(true) - aber wenn du eine Abbruchbedingung hast sollte die auch im Kopf der while schleife stehen - macht man meiner Ansicht nach einfach... man kann sofort sehen wann man die schleife beendet und muss erst nicht nach einem break suchen
 

Illuvatar

Top Contributor
Wenn du die Methode public Iterator iterator() drinhast, würde ich dir raten, in der Hauptklasse java.lang.Iterable zu implementieren, weil du dann ab 1.5 die for each Schleife drüberlaufen lassen kannst.
 

brasilian

Aktives Mitglied
Okay, nun läuft alles :applaus:

Ich war auch anfangs gegen while(true) Schleifen sehr skeptisch eingestellt, doch bin ich der Meinung, dass sie in kleineren überschauberen Blöcken durchaus sinnvoll sein können.

Vielen Dank für eure Hilfe ! :toll:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Algorithmen und Datenstrukturen Programmier Aufgabe Java Basics - Anfänger-Themen 10
M Algorithmen und Datenstrukturen Java Basics - Anfänger-Themen 3
V_Fynn03 Beliebiges Element in einer Liste löschen (Java)(Lineare Datenstrukturen) Java Basics - Anfänger-Themen 9
V_Fynn03 Lineare Datenstrukturen Element löschen? Java Basics - Anfänger-Themen 2
F Datenstrukturen Java Basics - Anfänger-Themen 5
S Datenstrukturen Java Basics - Anfänger-Themen 7
L Datenstrukturen/ Listen Java Basics - Anfänger-Themen 17
J Dynamische Datenstrukturen Java Basics - Anfänger-Themen 0
B Datenstrukturen in Java Java Basics - Anfänger-Themen 6
D komplexe Datenstrukturen "klonen" Java Basics - Anfänger-Themen 4
W Übungsaufgabe:Dynamische Datenstrukturen Java Basics - Anfänger-Themen 10
K Datentypen Gleiche Zufallszahlen in verschiedenen Datenstrukturen Java Basics - Anfänger-Themen 6
G Unterschied zwischen den Datenstrukturen Java Basics - Anfänger-Themen 2
G Probleme mit Datenstrukturen (Vektor, HashMap) Java Basics - Anfänger-Themen 5
H generische Bausteine, heterogene Datenstrukturen Java Basics - Anfänger-Themen 2
J Datenstrukturen Java Basics - Anfänger-Themen 12
S Datenstrukturen Java Basics - Anfänger-Themen 7
S Algorithmen Java Basics - Anfänger-Themen 1
Viktor A. Kaiser Rekursive Algorithmen Java Basics - Anfänger-Themen 9
D Algorithmen lernen Java Basics - Anfänger-Themen 45
H Übungsaufgabe algorithmen Java Basics - Anfänger-Themen 2
F Graphen-Algorithmen Java Basics - Anfänger-Themen 1
M Elementaren Algorithmen Java Basics - Anfänger-Themen 2
J Suche Tipps zum erstellen von Algorithmen Java Basics - Anfänger-Themen 5
E Algorithmen und Programmierung - Datum und Zeit ausgeben? Java Basics - Anfänger-Themen 8
S Algorithmen für Anfänger Java Basics - Anfänger-Themen 18
C Terminierung von imperativen Algorithmen Java Basics - Anfänger-Themen 13
B OOP Algorithmen und dann ? Java Basics - Anfänger-Themen 4
J Strategy: geht es immer um die Algorithmen? Java Basics - Anfänger-Themen 4
Spin Probleme mit Algorithmen Java Basics - Anfänger-Themen 8
W Algorithmen und Eigenschaften Java Basics - Anfänger-Themen 29
J Algorithmen verbessern Java Basics - Anfänger-Themen 11
B Zeitmessung von Algorithmen Java Basics - Anfänger-Themen 8
G Komplexe Algorithmen implementieren Java Basics - Anfänger-Themen 4
J Hilfe! Algorithmen --> ich schaff es nicht Java Basics - Anfänger-Themen 4
T Laufzeitanalyse von Algorithmen - Problem und Frage - Java Basics - Anfänger-Themen 1
R Algorithmen entwickeln und in Java umsetzen Java Basics - Anfänger-Themen 3
F Frage zu Iteratoren Java Basics - Anfänger-Themen 2
walker23m C++ Listen iteratoren in Java umwandeln Java Basics - Anfänger-Themen 3
J Polymorphie Iteratoren statt Collections Java Basics - Anfänger-Themen 13
H Iteratoren funktionieren nicht Java Basics - Anfänger-Themen 4
0x7F800000 fail-fast Iteratoren nerven gewaltig Java Basics - Anfänger-Themen 18
F Was sind Iteratoren ? Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben