堆栈溢出带循环c#

时间:2017-07-03 14:21:47

标签: c# stack-overflow

我目前遇到此循环问题。它变成一个无限循环,我得到一个堆栈溢出错误。这是针对利率交易互换申请。我是交易的长度,而l是增长指数。

private void button1_Click(object sender, EventArgs e)
        {
            int outp = 0;
            int i = int.Parse(tradeLength.Text);
            string month = "January";
            for (int l = 1; l <= i; l++)
            {
                Console.WriteLine("I iterated " + l + " Amount of times");
                if (l == 1)
                {
                    month = "January";
                }
                if (l == 2)
                {
                    month = "February";
                }
                if (l == 3)
                {
                    month = "March";
                }
                if (l == 4)
                {
                    month = "Aprll";
                }
                if (l == 5)
                {
                    month = "May";
                }
                if (l == 6)
                {
                    month = "June";
                }
                if (l == 7)
                {
                    month = "July";
                }
                if (l == 8)
                {
                    month = "August";
                }
                if (l == 9)
                {
                    month = "September";
                }
                if (l == 10)
                {
                    month = "October";
                }
                if (l == 11)
                {
                    month = "November";
                }
                if (l == 12)
                {
                    month = "December";
                }
                else
                {
                    month = "Null";
                    l = 1;
                }

3 个答案:

答案 0 :(得分:1)

原因是最终blue | Jake | 35 blue | Paul | 35 blue | Mike | 35 red | Bob | 42 red | Jill | 42 red | Shawn| 42

else

你想要 if (l == 12) { month = "December"; } else { // <- if l != 12 (e.g. l == 1) restart the loop month = "Null"; l = 1; }

else if

编辑:另一个问题(请参阅 FKEinternet的评论)是用户输入:如果 if (l == 1) { month = "January"; } else if (l == 2) { ... } ... else if (l == 12) { ... } else { month = "Null"; l = 1; } 大于{{1} }} i永远不会达到它。您必须验证用户输入:

12

或使用 modular 算法:

l

答案 1 :(得分:1)

在循环中设置循环变量不是一个好主意。就像@stuartd指出的那样,在你的else行中你将循环变量设置为1并导致循环重新开始。删除else块中的l=1行。

答案 2 :(得分:0)

我认为你想明年去i> 12.编写代码的方式,当发生这种情况时,你会永远循环,因为“l”永远不会达到大于12的数字,当它达到13并重新开始时它会变为1。

解决此问题,而不是

if (l == 1)

你想用

if ((l % 12) == 1)

所以你的整个循环就像这样:

 for (int l = 1; l <= i; l++)
        {
            Console.WriteLine("I iterated " + l + " Amount of times");
            if ((l % 12) == 1)
            {
                month = "January";
            }
            if ((l % 12) == 2)
            {
                month = "February";
            }
            if ((l % 12) == 3)
            {
                month = "March";
            }
            if ((l % 12) == 4)
            {
                month = "Aprll";
            }
            if ((l % 12) == 5)
            {
                month = "May";
            }
            if ((l % 12) == 6)
            {
                month = "June";
            }
            if ((l % 12) == 7)
            {
                month = "July";
            }
            if ((l % 12) == 8)
            {
                month = "August";
            }
            if ((l % 12) == 9)
            {
                month = "September";
            }
            if ((l % 12) == 10)
            {
                month = "October";
            }
            if ((l % 12) == 11)
            {
                month = "November";
            }
            if ((l % 12) == 0)
            {
                month = "December";
            }
       {

PS =这真的不是正确的方法,我只是使用你自己的代码并使用尽可能少的mod工作。祝你好运!