堆栈溢出与循环 C#

Stack overflow with a loop c#

我目前遇到这个循环的问题。它变成了一个无限循环,我得到了一个堆栈溢出错误。这是针对利率贸易互换申请。 i 是交易时长,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;
                }

原因是最后的else

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

你想要else if:

    if (l == 1)
    {
        month = "January";
    }
    else if (l == 2) 
    {
        ... 
    }
    ...
    else if (l == 12) 
    {
        ... 
    }
    else {
      month = "Null";
      l = 1;
    }

编辑: 另一个问题(参见 FKEinternet 的 评论)是一个用户输入:如果i 大于 12 l 永远达不到。您必须验证用户输入:

    int i = int.Parse(tradeLength.Text);

    if (i > 12)
      i = 12;    // or ask for other value

或使用模块化算法:

    for (int index = 1; index <= i; index++) {
      int l = index % 12 + 1;

      if (l == 1)
      {
         month = "January";
      }
      else if (l == 2)
        ...
      else if (l == 12)
        ...
      else  
      {
        month = "Null";
        l = 1;
      }
    }

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

我想你想去明年 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 = 这确实不是正确的方法,我只是使用您自己的代码并制作最少量的模组以使其按预期工作。祝你好运!