For循环中变量不变
本文关键字:变量 循环 For | 更新日期: 2023-09-27 17:54:22
在我的程序中,我在"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是我之前定义过的函数。
问题是1 / 6
是0
,因为1
和6
都是int
,所以结果也将是int
。int
不能有任何小数,所以它们被简单地丢弃,没有四舍五入发生。没有小数的0.16666666...
是0
。
要解决这个问题,至少要使其中一个为双精度或浮点数:
1.0 / 6
完整的行现在看起来像这样:
x = x + (1.0 / 6)*(K1x + 2 * K2x + 2 * K3x + K4x);
你的表达式
1 / 6
这是一个整数除法,得到整数0
。考虑使用
1.0 / 6.0
。