2017-10-07 2 views
0

J'ai créé une classe Pharo connue sous le nom BinarySearchTreean i mis en œuvre une méthode appelée BinarySearchTree >> précommande et BinarySearchTree >> indexméthode récursive dans Pharo produit #SubscriptOutOfBounds: 8

Précommande: Indice monTableau: Position

(myArray at: position) ~= -1 
ifTrue: [ 
     Transcript show: (myArray at: position). 
     self Preorder: myArray index: (position * 2). 
     self Preorder: myArray index: (position * 2) + 1. 
    ]. 

J'ai alors fourni ce tableau # (90 60 95 50) avec l'index 1 pour faire une recherche PreOrder dans mon arbre binaire que j'ai implémenté en utilisant des tableaux mais cela ne fonctionne pas. S'il vous plaît aider ...

Répondre

0

#at: signalera SubscriptOutOfBounds lorsque l'indice est < 0 ou supérieur à la taille du tableau (collections Smalltalk sont 1-base, à savoir le premier indice est 1, et non 0). 8 est nettement plus grand que 4 (la taille de myArray).

La vérification au début n'évaluera jamais à False car votre tableau n'a aucune entrée -1, et donc le bloc conditionnel sera évalué à chaque fois.

Je ne peux pas vraiment dire où se situe votre problème car vous avez exclu tout le code qui vous intéresse. Si vous ajoutez que je peux vous en dire plus.

+0

Je pense que tout le code nécessaire pour obtenir l'erreur est ici. Si vous appelez PreOrder: array index: 1, étant donné qu'il duplique la position à chaque appel et appelle de nouveau la même méthode, il suffit d'une courte durée pour appeler avec une position dépassant la taille. –

+0

Eh bien, oui ... mais vous devez faire beaucoup de suppositions. Il est probablement plus simple pour OP d'afficher le code manquant que pour nous de parcourir toutes les permutations de possibilités (par exemple, la valeur initiale de 'position', cette condition merveilleuse au début, etc.). –