0

这是我的代码:

 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 时,我会感到困惑。

谁能向我解释为什么会这样?

4

1 回答 1

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;
}
于 2013-04-06T11:11:56.287 回答