2010-10-10 6 views
0

J'essaye d'écrire une classe qui implémente un arbre en utilisant un tableau et j'ai besoin d'aide pour écrire une méthode Iterator qui retourne un itérateur des éléments stockés dans l'arbre.Java Array Tree Iterator

Solution:

public Iterator<E> iterator() { 
    return new Iterator<E>() { 
     private int index = 0; 

     public boolean hasNext() { 
      return index < ArrayTree.this.size(); 
     } 

     public E next() { 
      if (!hasNext()) { 
       return new NoSuchElementException(); 
      } 
      return ArrayTree.this.tree[index++]; 
     } 

     public void remove() { 
      return new OperationNotSupported(); 
     } 
    } 
} 
+1

Exactement ce dont vous avez besoin pour itérer? Étant donné un nœud, voulez-vous itérer sur ses descendants directs ou * tous * ses descendants? Le premier est trivial, le dernier est un peu compliqué. –

+0

Quel devrait être l'ordre d'itération? Et comment quelqu'un ajoute des nœuds à votre classe ArrayTree de toute façon? –

+1

En ce qui concerne votre [question précédente] (http://stackoverflow.com/questions/3901991/java-arraytree-help/3901996): Si vous trouvez la réponse utile (ce que vous semblez avoir fait, comme vous l'avez posté (et reçu la réponse à) 8 questions de suivi), vous devriez augmenter la réponse au lieu de supprimer toute la question et les réponses avec elle. – aioobe

Répondre

1

Sans examiner votre mise en œuvre de très près, une mise en œuvre très simple pourrait être

public Iterator<E> iterator() { 
    return new Iterator<E>() { 
     private int index = 0; 

     public boolean hasNext() { 
      return index < ArrayTree.this.size(); 
     } 

     public E next() { 
      if (!hasNext()) { 
       return new NoSuchElementException(); 
      } 
      return ArrayTree.this.tree[index++]; 
     } 

     public void remove() { 
      return new OperationNotSupported(); 
     } 
    } 
} 
0

Il y a deux façons d'aller, mais si votre classe ArrayTree Iterable met en œuvre et Interfaces Iterator vous serez sur votre chemin.

+0

Ce n'est pas une réponse est-il? Il aurait encore besoin d'implémenter la logique d'itération dans une méthode 'iterator()'. Le simple fait de marquer la classe comme 'implements Iterable' n'aiderait pas –

+1

C'EST une réponse. C'est devoirs. Il a besoin d'essayer. Quand il fera ce que j'ai suggéré, il verra quelque chose sur les méthodes qui doivent être mises en œuvre, peut-être que la lumière viendra. Sinon, il peut poser une question plus précise. –