这是我的代码:
public void button1_Click(object sender, System.EventArgs e)
{
System.Random rnd = new System.Random();
int ci = 1;
int di=1;
int fi=1;
int c = rnd.Next(1, 254);
int d = rnd.Next(1, 254);
for (int f = rnd.Next(1, 254); f < 255; f+=fi)
{
this.BackColor = System.Drawing.Color.FromArgb(c, d, f);
Application.DoEvents();
if (c == 254 || c == 0) { ci *= -1; }
if (f == 254 || f == 0 || f == 50 || f == 100 || f == 150 || f == 200)
{
d += di;
}
if (d == 255 || d == 0)
{
di *= -1;
}
if (f==254|| f == 0)
{
fi *= -1;
}
if (d == 254)
{
c += ci;
}
}
}
弹出的错误是d的值超过256.
然而,当我在调试器中运行它时,我看不到d将超过256的任何情况。当d为255时,di变为负,因此d + = di将减小d的值。因此,d不可能超过255.因此,当调试器告诉我d刚刚达到256时,这是令人困惑的。
有人可以向我解释为什么会这样吗?
答案 0 :(得分:4)
假设f
在内循环中永远不会超过254,d
是255。
第一次执行以下代码时,di
将变为否定。但是,由于最里面的循环继续执行d
没有改变,所以在下一次通过最里面的循环d
时,仍然 255,所以这个条件设置di
回到正面。
if (d == 255 || d == 0)
{
di *= -1;
}
我认为以下内容更接近您对包含variable *= -1;
的每个块的意图(具体使用d
):
if (d == 255)
{
di = -1;
}
else if (d == 0)
{
di = 1;
}