堆栈溢出与循环 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 = 这确实不是正确的方法,我只是使用您自己的代码并制作最少量的模组以使其按预期工作。祝你好运!
我目前遇到这个循环的问题。它变成了一个无限循环,我得到了一个堆栈溢出错误。这是针对利率贸易互换申请。 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 = 这确实不是正确的方法,我只是使用您自己的代码并制作最少量的模组以使其按预期工作。祝你好运!