2010-11-03 3 views
1

Je travaille actuellement sur une applet qui affiche un tas lorsque des valeurs sont ajoutées et supprimées. J'applique les tas comme arbre des entiers - IntTrees. J'écris le code pour les tas de biais, et la méthode 'add' me pose des problèmes. La méthode add fonctionne généralement, mais une fois de temps en temps cela provoque une erreur de débordement de pile quand une valeur est ajoutée, et je n'arrive pas à comprendre pourquoi.StackOverflowError - Ajout d'une valeur à un tas

Voici le code que je l'ai écrit pour la méthode add

't' est une variable d'instance - le tas lui-même. Y a-t-il quelque chose dans ce code qui provoquerait une erreur de débordement de pile, ou est-ce que le problème est peut-être ailleurs dans le programme? Merci!

Répondre

2

Jetez un oeil à cet extrait

if (rightVal <= leftVal) { 
    result = merge(right,left); 

Qu'est-ce qui se passe quand rightVal == leftVal?

+0

Merci. C'était une solution simple. – meerkat

2

@Adam a trouvé le problème pour vous. C'est pour vous aider à trouver des problèmes comme celui-ci. En cas d'erreur ou d'exception inattendue, il est important d'étudier attentivement la trace de la pile. Il ya souvent beaucoup d'informations dans une trace de pile ... si vous savez comment le lire.

Dans ce cas, vous auriez vu qu'il y avait beaucoup, beaucoup de cadres de pile pour la méthode merge. Si vous les aviez examinés attentivement, vous auriez remarqué que merge appelait merge à partir de la même ligne de code, encore et encore. C'est un signe classique d'une boucle de récursivité. Compte tenu de ces indices (et en particulier le numéro de ligne à laquelle la récursion se produisait), il aurait été simple de comprendre pourquoi vous aviez une boucle de récurrence.

+0

Aussi très utile - merci! – meerkat

Questions connexes