2017-07-03 131 views
-1

我目前有這個循環的問題。它變成一個無限循環,我得到一個堆棧溢出錯誤。這是針對利率交易互換應用程序的。我是交易的長度,l是增加的指數。帶循環c的堆棧溢出#

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; 
       } 
+0

正如僅供參考,您可以通過使用新的System.Globalization.CultureInfo(「en-US」)獲得一個月的名稱DateTimeFormat.GetMonthName(index)' –

+0

代碼是不完整的,並且問題的原因是最後的其他情況。 – Milster

+2

的代碼你的最後一節是說拋開「如果'l'不是12,將其設置爲1」 – stuartd

回答

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大於12l永遠不會達到它。你必須要麼驗證用戶輸入:

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; 
     } 
    } 
+1

如果'INT I = int.Parse(tradeLength.Text);'求的東西大於12,你仍然會有一個無限循環這個答案,因爲'l'永遠去'我' – FKEinternet

1

它不是設置循環內的循環變量一個非常好的主意。就像@stuartd指出的那樣,在你的其他行中,你將循環變量設置爲1,並使循環重新開始。刪除其他塊中的l=1行。

0

我想你想去明年當我> 12,你的代碼是由這樣的,遇到這種情況時,你要永遠循環下去,因爲「L」從來沒有達到超過12大數字,則它變爲1當它擊中13並重新開始時。

爲了解決這個問題,而不是

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 =這是真的不正確的方式來做到這一點,我只是使用自己的代碼,並使其最少量的MODS作爲滿意的工作。祝你好運!