需要帮助找出我在 if 语句中做错了什么
Need help figuring out what I'm doing wrong in my if statement
我仍在学习 C#
使用 Windows 表单,我需要一些关于 if 语句的帮助。
变量是固定的,因此除了单击一个按钮外,没有用户输入。我的问题开始的地方是 if 语句的开头。
VS(Visual Studios)不断的说condition中的half
和calc
,转字符串的hours
都是未赋值的局部变量。
然后在数学等式所在的else语句中,VS一直说"hours"无法从double
转换为hours
。
我不知道那是什么意思,因为我已经声明过了。然后它说 thirtheenpercent
不能在范围内声明,因为它已经被声明了。我不知道为什么这么说,因为这个替身不应该改变。
谁能帮我解释一下为什么会出现这些错误?
任何帮助将不胜感激。
decimal onecup = 130;
decimal thirtheenpercent;
decimal hours=0;
decimal half=130/2;
decimal calc=0;
while (onecup>half)
{
thirtheenpercent = (onecup * 13) / 100;
calc =onecup-thirtheenpercent;
onecup=calc;
hours++;
} mtbHalf.Text = Convert.ToString(hours)+" Hours.";
while (!(hours==24))
{
thirtheenpercent = (onecup * 13) / 100;
calc = onecup - thirtheenpercent;
onecup = calc;
hours++;
} mtbOnecup24.Text = Convert.ToString(Math.Round(calc,2)) + " mg.";
//While i was running this program, i ran into some conflictions with my already declared variables for my last while loop so i created some new ones.//
decimal thirtheenpercent2;
decimal calc2 = 0;
decimal onecup2 = 130;
int hours2 = 0;
while (!(hours2 == 24))
{
thirtheenpercent2 = (onecup2 * 13) / 100;
calc2 = onecup2 - thirtheenpercent2;
onecup2 = calc2;
hours2++;
onecup2 = onecup2 + 130;
} mtbQuantity.Text = Convert.ToString(Math.Round(onecup2, 2)) + " mg.";
}
hours
变量未分配,在您发布的代码中。所以这个错误对我来说似乎是正确的。
代码示例不完整,但鉴于您发布的内容,half
和 calc
似乎并未实际未分配。因此,最可能的解释是您误解了错误消息(即它没有说明您所说的内容),或者您没有共享正确的代码(即您包含的代码不是正确的代码)发生错误时正在编译)。
就最后的错误而言,您的程序语句 hours * thirtheenpercent = calc
是无效语法。编译器可能会尝试将其解释为变量声明,其中 hours
是类型,thirtheenpercent
变量被声明为指向该类型的指针,并使用变量 [=] 持有的值进行初始化12=].
这显然不是你的意思,当然因为 hours
不是类型,所以语句无法成功编译。
可能你的意思是calc = hours * thirtheenpercent
?从你的问题很难判断。
您似乎还有其他算法问题。但是如果没有看到代码应该做什么的实际规范,就很难确定代码应该是什么样子。根据评论,该算法是否会像您希望的那样工作是值得怀疑的。您从 130 的 13% 开始,然后(可能)迭代处理该值的倍数。但是13%的倍数不等于50%,所以(130的13%)的倍数不可能等于(130的50%)
最重要的是,正如评论者 Ed Gibbs 所说,处理浮点数时,half
和 calc
完全有可能 永远不会 相等其他甚至算法也有意义。您可能会非常接近,但不是两个值实际上比较相同的地方。
我仍在学习 C#
使用 Windows 表单,我需要一些关于 if 语句的帮助。
变量是固定的,因此除了单击一个按钮外,没有用户输入。我的问题开始的地方是 if 语句的开头。
VS(Visual Studios)不断的说condition中的half
和calc
,转字符串的hours
都是未赋值的局部变量。
然后在数学等式所在的else语句中,VS一直说"hours"无法从double
转换为hours
。
我不知道那是什么意思,因为我已经声明过了。然后它说 thirtheenpercent
不能在范围内声明,因为它已经被声明了。我不知道为什么这么说,因为这个替身不应该改变。
谁能帮我解释一下为什么会出现这些错误? 任何帮助将不胜感激。
decimal onecup = 130;
decimal thirtheenpercent;
decimal hours=0;
decimal half=130/2;
decimal calc=0;
while (onecup>half)
{
thirtheenpercent = (onecup * 13) / 100;
calc =onecup-thirtheenpercent;
onecup=calc;
hours++;
} mtbHalf.Text = Convert.ToString(hours)+" Hours.";
while (!(hours==24))
{
thirtheenpercent = (onecup * 13) / 100;
calc = onecup - thirtheenpercent;
onecup = calc;
hours++;
} mtbOnecup24.Text = Convert.ToString(Math.Round(calc,2)) + " mg.";
//While i was running this program, i ran into some conflictions with my already declared variables for my last while loop so i created some new ones.//
decimal thirtheenpercent2;
decimal calc2 = 0;
decimal onecup2 = 130;
int hours2 = 0;
while (!(hours2 == 24))
{
thirtheenpercent2 = (onecup2 * 13) / 100;
calc2 = onecup2 - thirtheenpercent2;
onecup2 = calc2;
hours2++;
onecup2 = onecup2 + 130;
} mtbQuantity.Text = Convert.ToString(Math.Round(onecup2, 2)) + " mg.";
}
hours
变量未分配,在您发布的代码中。所以这个错误对我来说似乎是正确的。
代码示例不完整,但鉴于您发布的内容,half
和 calc
似乎并未实际未分配。因此,最可能的解释是您误解了错误消息(即它没有说明您所说的内容),或者您没有共享正确的代码(即您包含的代码不是正确的代码)发生错误时正在编译)。
就最后的错误而言,您的程序语句 hours * thirtheenpercent = calc
是无效语法。编译器可能会尝试将其解释为变量声明,其中 hours
是类型,thirtheenpercent
变量被声明为指向该类型的指针,并使用变量 [=] 持有的值进行初始化12=].
这显然不是你的意思,当然因为 hours
不是类型,所以语句无法成功编译。
可能你的意思是calc = hours * thirtheenpercent
?从你的问题很难判断。
您似乎还有其他算法问题。但是如果没有看到代码应该做什么的实际规范,就很难确定代码应该是什么样子。根据评论,该算法是否会像您希望的那样工作是值得怀疑的。您从 130 的 13% 开始,然后(可能)迭代处理该值的倍数。但是13%的倍数不等于50%,所以(130的13%)的倍数不可能等于(130的50%)
最重要的是,正如评论者 Ed Gibbs 所说,处理浮点数时,half
和 calc
完全有可能 永远不会 相等其他甚至算法也有意义。您可能会非常接近,但不是两个值实际上比较相同的地方。