2010-05-04 4 views
0
public override Models.CalculationNode Parse(string expression) 
{ 
    var calNode = new Models.CalculationNode(); 

    int i = expression.Length; 
    char[] x = expression.ToCharArray(); 
    string temp = ""; 

    //Backwards assembly of the tree 

    //Right Node 
    while (!IsOperator(x[i]) && i > 0) 
    { 
     if (!x[i].Equals(' ')) temp = x[i] + temp; 
     i--; 
    } 
} 

Cela fait un moment que j'ai utilisé des arbres et que je reçois une exception hors limites dans la boucle while.Exception hors limite

Répondre

1

Vous avez une erreur «off-by-1» lorsque vous démarrez à i = expression.Length. Ce premier indice sera hors limites dès le départ. Vous pouvez réécrire la boucle comme une boucle comme ceci:

char[] x = expression.ToCharArray(); 
string temp = ""; 

//Backwards assembly of the tree 

//Right Node 
for (int i = x.Length - 1; i >= 0 && !IsOperator(x[i]); --i) 
{ 
    if (!x[i].Equals(' ')) temp = x[i] + temp; 
} 
+0

merci c'est beaucoup plus propre – Matt

1
tableau de caractères

est de zéro à longueur 1

1

Vous devriez essayer d'écrire int i = x.Length - 1;.

Dès que x contient les éléments indexés 0-x.Length - 1, x[expression.Length] semble être juste un élément hors limites.

1

j'inverser le test:

while (i >= 0 && !IsOperator(x[i])) 

parce que le IsOperator sera évalué d'abord et i sera -1 à la fin de la boucle (nonobstant les problèmes que vous pourriez avoir avec le début de la boucle).

0

Vous avez besoin:

int i = expression.Length; 

puis dans la boucle pendant que vous aurez besoin:

while (!IsOperator(x[i]) && i >= 0) 

Les tableaux sont 0 base , donc 0 est la première position et la position finale est la longueur moins 1.

0

Vous définissez i pour être la longueur de t La chaîne de caractères, qui commence à 1. L'indexation de votre tableau commence à 0, donc lorsque vous accédez à l'élément à la fin, vous essayez d'aller 1 au-delà de vos limites. C'est le premier passage de la boucle qui lance l'erreur.

Vous devez ajouter -1 à votre initialisation de i.

Questions connexes