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循环中遇到了一个超出范围的异常。
答案 0 :(得分:1)
字符数组从零到长度为1
答案 1 :(得分:1)
你应该尝试写int i = x.Length - 1;
。
只要x
包含从0
到x.Length - 1
索引的项目,x[expression.Length]
似乎只是一个超出范围的项目。
答案 2 :(得分:1)
我要反转测试:
while (i >= 0 && !IsOperator(x[i]))
因为IsOperator
将首先被评估,并且我将在循环结束时为-1(不会遇到循环开始时可能遇到的任何问题)。
答案 3 :(得分:1)
从i = expression.Length
开始,你有一个1分之一的错误。第一个指数将立即超出界限。您可以将循环重写为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;
}
答案 4 :(得分:0)
你需要:
int i = expression.Length;
然后在while循环中你需要:
while (!IsOperator(x[i]) && i >= 0)
数组基于0,因此0是第一个位置,最终位置是长度减去1。
答案 5 :(得分:0)
您将i设置为字符串的长度,从1开始。 你的数组索引从0开始,所以当你最后访问元素时,你实际上试图超越你的界限。这是抛出错误的循环的第一次运行。
您需要在初始化i时添加-1。