2010-05-04 8 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--; 
    } 
} 

나는 나무를 사용하고 while 루프에서 경계 예외를 벗어났습니다.경계 초과 예외

답변

1

i = expression.Length에서 시작하면 꺼짐 별 오류가 표시됩니다. 첫 번째 인덱스는 배트에서 벗어날 것이다. 당신과 같이 for 루프로 루프를 다시 작성할 수 :

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

감사합니다. – Matt

1

문자 배열은 0에서 길이 1

1

당신은 int i = x.Length - 1;를 작성 시도해야하는 것입니다.

는 즉시 x0에서 x.Length - 1에 색인 항목이 포함로, x[expression.Length]는 경계 중 하나의 항목이 될 것으로 보인다.

나는 시험 역 것
1

다음 IsOperator가 먼저 평가되고 난 것 -1 루프의 끝 부분에 있기 때문에

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

을 (당신이의 시작과 함께있을 수있는 문제를 견딜 수 없습니다 고리).

0

을 당신이 필요합니다

int i = expression.Length; 

다음 while 루프에서 당신이 필요합니다 :

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

배열 기반 0 인 , 그래서 0이 첫 번째 위치이고 마지막 위치는 길이에서 1을 뺀 것입니다.

0

당신은 i를 t의 길이로 설정하고 있습니다. 그는 1에서 시작하는 문자열입니다. 배열 인덱싱은 0부터 시작합니다. 결국 요소에 액세스 할 때 실제로 범위를 벗어나려고 시도합니다. 그것은 오류를 던지고있는 루프의 첫 번째 실행입니다.

i의 초기화에 -1을 추가해야합니다.

관련 문제