0

如何解决这个错误?

这是我的代码

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();
    }
}

这就是错误...

http://imageshack.com/a/img820/3553/wrzb.jpg

4

3 回答 3

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()方法,但那是另一个季节。

于 2013-11-08T17:40:17.140 回答
0

我相信错误是该X方法递归地调用自己。这是堆栈溢出的根本原因,但实际上是在int.Parse调用时触发的。你需要改变你的 else 逻辑,这样它就不会在X()没有终止的情况下继续分支

于 2013-11-08T17:42:02.213 回答
0

If txtNumbers.Textis never "1"you will have a recursion that continue until you get the StackOverflowException. 仅仅因为您调用X()whentxtNumbers.Text不同于"1".

于 2013-11-08T17:42:18.857 回答