如何解决此错误?
这是我的代码
public void X()
{
foreach (char c in txtNumbers.Text)
{
sum = sum + (int.Parse(c.ToString()) * int.Parse(c.ToString()));
}
txtNumbers.Text = (sum.ToString());
sum = 0;
if (txtNumbers.Text == "1")
{
Response.Write("happy numbers");
return;
} else {
X();
}
}
这就是错误...
答案 0 :(得分:5)
如果数字加起来不是“1”,你的程序将进入无限循环。和崩溃。硬。像它一样。
这是因为在else
块中,您再次调用X()
方法。似乎没有办法阻止你的递归,因此你的程序崩溃了。
一个简单的解决方法:
public void X()
{
foreach (char c in txtNumbers.Text)
{
sum = sum + (int.Parse(c.ToString()) * int.Parse(c.ToString()));
}
txtNumbers.Text = (sum.ToString());
sum = 0;
if (txtNumbers.Text == "1")
{
Response.Write("happy numbers");
return;
}else{
Response.Write("sad numbers");
}
}
另外,我建议使用TryParse()
方法,但那是另一个季节。
答案 1 :(得分:0)
我认为错误是X
方法以递归方式调用自身。这是堆栈溢出的根本原因,但它实际上是在int.Parse
调用时触发的。您需要更改其他逻辑,以便在不终止
X()
答案 2 :(得分:0)
如果txtNumbers.Text
永远不是"1"
,那么在您获得StackOverflowException之前,您将继续递归。仅仅因为X()
与txtNumbers.Text
不同时调用"1"
。