需要帮助弄清楚我在if语句中做错了什么

时间:2015-04-04 01:54:58

标签: c# winforms math if-statement

我仍在使用Windows窗体学习C#,我想对if语句提供一些帮助。

变量是固定的,因此只需单击一个按钮就不会有用户输入。我的问题开始于if语句的开头。

VS(Visual Studios)经常说条件中的halfcalc以及转换为字符串的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.";


    }

1 个答案:

答案 0 :(得分:1)

在您发布的代码中,hours变量未分配。所以这个错误对我来说似乎是正确的。

代码示例不完整,但鉴于您发布的内容,halfcalc实际上未分配。因此,最可能的解释是,您要么误解错误消息(即它没有说出您所说的内容),要么您没有共享正确的代码(即您所包含的代码不是'发生错误时编译的代码。)

就上一个错误而言,您的程序语句hours * thirtheenpercent = calc是无效的语法。编译器可能会尝试将其解释为变量声明,其中hours是类型,thirtheenpercent变量被声明为指向该类型的指针,使用变量{{持有的值初始化1}}。

这显然不是你的意思,当然因为calc不是一个类型,所以语句无法成功编译。

可能你的意思是hours?你的问题很难说清楚。

您似乎还有其他算法问题。但是,如果没有看到代码应该执行的实际规范,那么很难确定代码应该是什么样子。根据这些评论,这个算法可能会像你想要的那样工作,这是值得怀疑的。你从130的13%开始,然后(可能)迭代地处理该值的倍数。但是没有13%的倍数等于50%,因此(130的13%)的倍数不等于(130的50%)。

最重要的是,正如评论者Ed Gibbs所说,处理浮点数时,calc = hours * thirtheenpercenthalf 永远不会彼此相等是完全可能的即使算法有意义。你可以非常接近,但不是两个值实际比较相同的地方。