1

在我的程序中,我在“button1_Click”中定义了一些变量,并且“button1_Click”函数中还有一个“for”循环。在那个循环中,我希望更改这些变量,但它们没有。我应该做什么...通过引用传递它们?如果是,如何?

private void button1_Click(object sender, EventArgs e)
        {
            double t=0;
            double x = double.Parse(X0.Text);
            double z = double.Parse(Z0.Text);
            double y = double.Parse(Y0.Text);
            double u = double.Parse(U0.Text);
            double tn = double.Parse(Tn.Text);
            double h = double.Parse(textbox_h.Text);

            for (int i = 0; i < (tn / h); i++)
            {

                double K1x = h * fx(t, x, y, z, u);

                double K2x = h * fx(t + h / 2, x + K1x / 2, y + K1y / 2, z + K1z / 2, u + K1u / 2);

                double K3x = h * fx(t + h / 2, x + K2x / 2, y + K2y / 2, z + K2z / 2, u + K2u / 2);

                double K4x = h * fx(t + h, x + K3x, y + K3y, z + K3z, u + K3u);


                x =x+ (1 / 6)*(K1x + 2 * K2x + 2 * K3x + K4x);
                richTextBox1.Text += "X(" + (h * (i + 1)).ToString() + ")=" + x.ToString();


            }

一切都是正确的,但在最后一行,x 的新值不会进入 x,而旧值仍然存在。请注意,fx、fz、fy、fu 是我之前定义的函数。

4

2 回答 2

7

问题在于1 / 60因为两者1都是6int所以结果也会是int。Anint不能有任何小数,因此它们被简单地丢弃,不会发生四舍五入。0.16666666...没有小数0是.

要修复它,请至少将两者之一设为双精度或浮点数:

1.0 / 6

完整的行现在应该如下所示:

x = x + (1.0 / 6)*(K1x + 2 * K2x + 2 * K3x + K4x);
于 2013-01-17T13:41:21.433 回答
0

你有你的表情

1 / 6

这是一个整数除法并给出 integer 0。考虑使用

1.0 / 6.0

反而。

于 2013-01-17T13:42:56.713 回答