C# 越界异常
自从我使用树已经有一段时间了,我在while循环中遇到了一个越界异常。字符数组是从零到长度-1字符数组是从零到长度-1你应该试着写C# 越界异常,c#,segmentation-fault,C#,Segmentation Fault,自从我使用树已经有一段时间了,我在while循环中遇到了一个越界异常。字符数组是从零到长度-1字符数组是从零到长度-1你应该试着写int I=x.length-1 当x包含从0到x.Length-1的索引项时,x[expression.Length]似乎只是一个超出范围的项。您应该尝试编写int i=x.Length-1 只要x包含从0到x.Length-1的索引项,x[expression.Length]似乎只是一个超出范围的项。我将反向测试: public override Models.C
int I=x.length-1代码>
当x
包含从0
到x.Length-1
的索引项时,x[expression.Length]
似乎只是一个超出范围的项。您应该尝试编写int i=x.Length-1代码>
只要x
包含从0
到x.Length-1
的索引项,x[expression.Length]
似乎只是一个超出范围的项。我将反向测试:
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--;
}
}
因为将首先计算等运算符,循环结束时我将为-1(尽管循环开始时可能出现任何问题)。我将反向测试:
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--;
}
}
因为将首先计算IsOperator
,循环结束时i将为-1(尽管循环开始时可能出现任何问题)。当从i=expression.Length开始时,会出现off-by-1错误。第一个指标马上就出界了。您可以将循环重写为for循环,如下所示:
while (i >= 0 && !IsOperator(x[i]))
当您从i=expression.Length
开始时,出现了一个off-by-1错误。第一个指标马上就出界了。您可以将循环重写为for循环,如下所示:
while (i >= 0 && !IsOperator(x[i]))
你需要:
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;
}
然后在while循环中,您需要:
int i = expression.Length;
数组基于0,因此0是第一个位置,最终位置是长度减1。您需要:
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;
}
然后在while循环中,您需要:
int i = expression.Length;
数组是基于0的,因此0是第一个位置,最后一个位置是长度减去1。您将i设置为字符串的长度,从1开始。
但是,数组索引从0开始,因此当您在末尾访问元素时,实际上是在试图将1超出您的边界。这是抛出错误的循环的第一次运行
您需要将-1添加到i的初始化中。您将i设置为字符串的长度,从1开始。
但是,数组索引从0开始,因此当您在末尾访问元素时,实际上是在试图将1超出您的边界。这是抛出错误的循环的第一次运行
您需要在i的初始化中添加-1