计算总计并显示

查格曼

成员
已加入
2019年10月5日
留言内容
9
编程经验
Beginner
大家好,我试图在这里计算总的汽车租赁费用,然后在我的表格上单击“总费用”按钮时显示金额。它一直显示为0。我也一直在和一位朋友一起进行故障排除,我们无法解决。有人能帮忙吗?

这是我的课程代码:

C#:
public class CarRental
{
    #region "Properties/Fields"

        //5 Instance Properties

        //auto implemented publice get, set
        public string CustomerName { get; set; }

    //auto implemented public get, private set
    public decimal RentalCharge { get; private set; }

    // three private fields

    private int beginOdmometerReading;
    private int daysRented;
    private int endOdometerReading;

    public int BeginOdometerReading
    {
        get
        {
            return beginOdmometerReading;
        }
        set
        {
            beginOdmometerReading = value;
        }
    }

    public int EndOdometerReading
    {
        get
        {
            return endOdometerReading;
        }
        set
        {
            endOdometerReading = value;
        }
    }

    public int DaysRented
    {
        get
        {
            return daysRented;
        }
        set
        {
            daysRented = value;
        }
    }

    #endregion

        #region "Cunstructors"

        //Overloaded Constructor to instantiate object and set four properties

        public CarRental(string customerName, int beginOdometerReading, int endOdometerReading, int daysRented)
    {
        CustomerName = customerName;
        BeginOdometerReading = beginOdometerReading;
        EndOdometerReading = endOdometerReading;
        DaysRented = daysRented;
        CalculateCost();
    }

    // Default Constructor
    public CarRental()
    {
    }

    #endregion

        #region "Methods"

        //Private Instance Method to Calculate rental charge and set crental charge property
        private void CalculateCost()
    {
        //Constant Variables

        const decimal costPerDay = 29.50m;
        const decimal costPerMile = 0.45m;
        decimal RentalTotal;

        //Calculate Cost
        RentalTotal = ((EndOdometerReading - BeginOdometerReading) * costPerMile) + (costPerDay * daysRented);

        //set the RentalCharge Property Value
        RentalTotal = RentalCharge;
    }

    #endregion
}


这是我的按钮的代码,它试图调用计算以显示单击按钮时的状态:
C#:
private void btnCharge_Click(object sender, EventArgs e)
{
    // Display Rental Car Charge amount in Label "Charge"
    CarRental aCarRental = new CarRental(txtName.Text, (int)nBeginOdometer.Value, (int)nEndOdometer.Value, (int)nDaysRented.Value);
    lblCharge.Text = aCarRental.RentalCharge.ToString();
}

非常感谢您的任何投入!!!
 
由主持人最后编辑:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,525
地点
悉尼,澳大利亚
编程经验
10+
您需要调试代码,而不仅仅是阅读代码。在代码中的每个方法上放置一个断点,然后在调试器中逐步处理该断点,并在每个步骤中测试其状态,以确保一切都与您期望的一样。显然,该状态在某些时候是意外的,这就是您需要磨练的问题。即使您自己无法解决方案,至少也可以为我们提供更多相关信息。调试器提供 汽车, 当地人, 手表 即时 Windows可以在每个步骤评估变量和其他表达式,此外还有各种其他调试工具。您需要使用它们。
 

德莱门

新成员
已加入
2019年10月6日
留言内容
2
编程经验
10+
嘿。该论坛的新手,但以为我会尝试权衡一下。

首先,其他答复是最佳建议。您需要单步执行代码,并在每个步骤中查看每个属性/变量中的值。

我还建议您仔细注意您的var名称以及使用它们的时间。

我认为解决方案并不困难,但是出于学习的目的,我同意最好一步一步地找到它,而不是让别人随便说说。"change this."

祝你好运。如果愿意,请告诉我们您何时修复以及如何修复。


和平,

-戴夫

使用Tapatalk从我的LG-LS998发送
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,538
地点
弗吉尼亚州切萨皮克
编程经验
10+
仔细查看第92行和分配方向。忽略第91行的注释。(顺便说一句,这就是大多数编程风格指南建议不要注释琐碎或不言而喻的代码的原因。琐碎代码应易于理解且不需要解释。它所做的只是添加噪音而不是澄清代码。代码。)
 

查格曼

成员
已加入
2019年10月5日
留言内容
9
编程经验
Beginner
By the way, "constant variables"是矛盾的。常数是常数,变量可以变化。从定义上讲,它们是相反的。
谢谢您的意见。命名约定只是遵循我的老师希望如何完成。我已经调试了代码,但是没有发现错误。我已经和一位朋友逐行浏览了代码,试图找出我哪里出错了。我们尝试了几种方法来解决此问题,但未成功。这只是我最后的努力,目的是了解我是否可以了解自己做错了什么以及如何解决该问题,因此我知道前进的方向。谢谢!
 

查格曼

成员
已加入
2019年10月5日
留言内容
9
编程经验
Beginner
仔细查看第92行和分配方向。忽略第91行的注释。(顺便说一句,这就是大多数编程风格指南建议不要注释琐碎或不言而喻的代码的原因。琐碎代码应易于理解且不需要解释。它所做的只是添加噪音而不是澄清代码。代码。)
 

查格曼

成员
已加入
2019年10月5日
留言内容
9
编程经验
Beginner
嘿。该论坛的新手,但以为我会尝试权衡一下。

首先,其他答复是最佳建议。您需要单步执行代码,并在每个步骤中查看每个属性/变量中的值。

我还建议您仔细注意您的var名称以及使用它们的时间。

我认为解决方案并不困难,但是出于学习的目的,我同意最好一步一步地找到它,而不是让别人随便说说。"change this."

祝你好运。如果愿意,请告诉我们您何时修复以及如何修复。


和平,

-戴夫

使用Tapatalk从我的LG-LS998发送
谢谢您的意见。我调试了代码
但没有发现错误。我已经和一位朋友逐行浏览了代码,试图找出我哪里出错了。我们尝试了几种方法来解决此问题,但未成功。这只是我最后的努力,目的是了解我是否可以了解自己做错了什么以及如何解决该问题,因此我知道前进的方向。谢谢!
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,933
地点
英国
编程经验
10+
89号线使92号线一目了然,不是吗?
您具有名称非常相似的局部变量和成员属性(许多仅因大小写而异),这可能使调试眼花trick乱。
他的写法没有错。实际上,它符合命名约定,并且使遵循OP编写的代码更加容易。

但没有发现错误。
我不同意。我将在第11行上放置一个调试点,然后开始研究创建用于返回值而不是空属性的函数。
 

德莱门

新成员
已加入
2019年10月6日
留言内容
2
编程经验
10+
89号线使92号线一目了然,不是吗?

他的写法没有错。实际上,它符合命名约定,并且使遵循OP编写的代码更加容易。
只想着如果他不处理类属性RentalCharge和局部变量RentalTotal,也许他会看到自己的错误。通常,物业用大写字母表示,而当地人则不使用。每个地方都有自己的样式,但通常将_foo用作私有成员var,将Foo用作公共属性,并将foo用作局部变量。我的假设是,姓名的相似性是为什么他没有看到自己的错误。

无论如何,只是想把他推向错误的方向。

和平,

-戴夫
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,538
地点
弗吉尼亚州切萨皮克
编程经验
10+
对于私有类变量,我也使用前导下划线。 I remember how annoying it was when StyleCop complains about the leading underscore, and to make matters worse, it would say I should be using this.. It's usually one of the first rules I turn off. :devilish:

顺便说一句,原始的.NET命名约定实际上建议不要使用下划线前缀。 ("Don't use Hungarian." "Don't use prefixes.") It looks like 当前的命名准则 已经退缩了一点,现在说"no prefix"约定仅适用于公共和受保护,不适用于私有和内部。我猜是因为人们指出了references.microsoft.com和Microsoft在GitHub上开源的代码中的代码具有讽刺意味。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,933
地点
英国
编程经验
10+
我的假设是,姓名的相似性是为什么他没有看到自己的错误。
我明白了你的意思和目标。但是我认为代码的构建以及缺乏经验是为什么他们没有看到错误,而不是因为命名或命名约定规则。为了更好的可读性,可以极大地简化代码构造。
对于私有类变量,我也使用前导下划线。
我尽量不要亲自这样做,除非我有义务使用多个在两个类中都使用相同对象名的相似命名的类,或者派生类具有相同名称的地方。 (非常罕见的情况)。虽然我必须承认;当发现自己处于这种情况时。最好将两个类合并为一个,以免一开始就造成这种混乱,这是我通常所做的。或者,我将创建一个接口并设置类与之签订合同的规则。 ;)
 

查格曼

成员
已加入
2019年10月5日
留言内容
9
编程经验
Beginner
只想着如果他不处理类属性RentalCharge和局部变量RentalTotal,也许他会看到自己的错误。通常,物业用大写字母表示,而当地人则不使用。每个地方都有自己的样式,但通常将_foo用作私有成员var,将Foo用作公共属性,并将foo用作局部变量。我的假设是,姓名的相似性是为什么他没有看到自己的错误。

无论如何,只是想把他推向错误的方向。

和平,

-戴夫
谢谢你。银行业务
 

查格曼

成员
已加入
2019年10月5日
留言内容
9
编程经验
Beginner
谢谢大家的意见。即使如此,我也不是他。我将更多地看我的代码。我对此很陌生,所以因为我的老师不擅长讲解,所以我只是试图寻找帮助和学习的途径。谢谢你们!
 

查格曼

成员
已加入
2019年10月5日
留言内容
9
编程经验
Beginner
仔细查看第92行和分配方向。忽略第91行的注释。(顺便说一句,这就是大多数编程风格指南建议不要注释琐碎或不言而喻的代码的原因。琐碎代码应易于理解且不需要解释。它所做的只是添加噪音而不是澄清代码。代码。)
我只想说非常感谢您告诉我检查第92行。感谢您的帮助!
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,525
地点
悉尼,澳大利亚
编程经验
10+
我调试了代码,但没有发现错误。
您说了几次,但我看不出它是真的。您到底做了什么调试工作。您设置断点了吗?您是否逐行浏览了代码?您是否在每一步都检查了状态(相关变量和其他表达式的值)?如果不是,那么您没有调试,或者至少没有正确调试。调试不仅是运行代码并从用户的角度看发生了什么。如果调试正确,则可以在每个步骤将应用程序的状态与期望进行比较。如果它们匹配,而您仍然没有得到预期的结果,那么显然您的期望就是问题所在,您需要重新评估它们。如果实际状态在任何时候都与您的期望有所不同,那么您已经找到了问题,然后您便需要进行实际调查。一遍又一遍地阅读代码通常是没有意义的。如果您在前几次尝试中都无法通过眼睛发现问题,那么您就根本不可能。您需要观看实际的代码。

Looking back at your original code, lines 89 and 92 both set the value of RentalTotal but don't set the value of RentalCharge. If you had actually stepped through those two lines, it seems hard to believe that what they did would actually match your expectations, which is why I can't believe that you actually debugged that code. If you did and you expected to see one variable set twice on subsequent lines then, as I said, the fact that the code did everything you expected and still produced incorrect results should have told you that your expectations were wrong. In that case, you go back to the drawing board and reassess your expectations, which means picking up a pen and paper and writing down what you expected the code to do, step by step. Once you have an actual algorithm written down, then you can write code to implement that algorithm. The reason that people make mistakes like this is that they don't have a clear idea of what the code is actually supposed to do when they write it. Now that it's been pointed out, you'll be better able to look for and find such issues yourself in future. Debugging is a huge chunk of software development.
 
Last edited:
最佳 底部