我仍在使用Windows窗体学习C#
,我想对if语句提供一些帮助。
变量是固定的,因此只需单击一个按钮就不会有用户输入。我的问题开始于if语句的开头。
VS(Visual Studios)经常说条件中的half
和calc
以及转换为字符串的hours
都是未分配的局部变量。
然后在数学方程所在的else语句中,VS一直说"小时"无法从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.";
}
答案 0 :(得分:1)
在您发布的代码中,hours
变量未分配。所以这个错误对我来说似乎是正确的。
代码示例不完整,但鉴于您发布的内容,half
和calc
实际上未分配。因此,最可能的解释是,您要么误解错误消息(即它没有说出您所说的内容),要么您没有共享正确的代码(即您所包含的代码不是'发生错误时编译的代码。)
就上一个错误而言,您的程序语句hours * thirtheenpercent = calc
是无效的语法。编译器可能会尝试将其解释为变量声明,其中hours
是类型,thirtheenpercent
变量被声明为指向该类型的指针,使用变量{{持有的值初始化1}}。
这显然不是你的意思,当然因为calc
不是一个类型,所以语句无法成功编译。
可能你的意思是hours
?你的问题很难说清楚。
您似乎还有其他算法问题。但是,如果没有看到代码应该执行的实际规范,那么很难确定代码应该是什么样子。根据这些评论,这个算法可能会像你想要的那样工作,这是值得怀疑的。你从130的13%开始,然后(可能)迭代地处理该值的倍数。但是没有13%的倍数等于50%,因此(130的13%)的倍数不等于(130的50%)。
最重要的是,正如评论者Ed Gibbs所说,处理浮点数时,calc = hours * thirtheenpercent
和half
永远不会彼此相等是完全可能的即使算法有意义。你可以非常接近,但不是两个值实际比较相同的地方。