Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对象计算验证C#_C#_Object - Fatal编程技术网

对象计算验证C#

对象计算验证C#,c#,object,C#,Object,我的目标是让这个程序能够获取大量的披萨和各种类型的披萨,并计算它们的价格。我决定采用对象解决方案。问题是它不计算它,即使字段为空,它也让程序运行。我真的不知道为什么它不计算它。我还不熟悉对象,所以可能会有一些逻辑错误 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; usin

我的目标是让这个程序能够获取大量的披萨和各种类型的披萨,并计算它们的价格。我决定采用对象解决方案。问题是它不计算它,即使字段为空,它也让程序运行。我真的不知道为什么它不计算它。我还不熟悉对象,所以可能会有一些逻辑错误

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Assignment_2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void OrderButton_Click(object sender, EventArgs e)
        {
            double withTax = 0;
            double tax = 0;
            double subTotal = 0;
            var pizzas = new Pizza[3];
            if(ValidateAndDeclareQuantities())
            {
                pizzas = Declare();
                subTotal = CalcSubTotal(pizzas);
                tax = CalcTax(pizzas);
                withTax = CalcWithTax(pizzas);
            }

        }
        bool ValidateAndDeclareQuantities()
        {
            var combolist = new List<ComboBox>();
            combolist.Add(comboBox1);
            combolist.Add(comboBox2);
        combolist.Add(comboBox3);
        var textboxlist = new List<TextBox>();
        textboxlist.Add(Quantity1);
        textboxlist.Add(Quantity2);
        textboxlist.Add(Quantity3);
        for (int i = 0; i < 3; i++)
        {
            if (combolist[i].Text == "Cheese" || combolist[i].Text ==     "Vegetable" || combolist[i].Text == "Meat")
            { }
            else combolist[i].Text = "Wrong input";
        }
        int[] Quantities = new int[3];
        for (int i = 0; i < 3; i++)
        {
            if (int.TryParse(textboxlist[i].Text, out     Quantities[i])&&textboxlist[i].Text!=null)
            { }
            else { textboxlist[i].Text = "Wrong input"; }
        }
        return true;
    }

    Pizza[] Declare()
    {
        var pizzas = new Pizza[3];
        string type;
        int price;
        type = comboBox1.Text;
        price = int.Parse(Quantity1.Text);
        Pizza pizza1 = new Pizza(type, price);
        pizzas[0] = pizza1;

        type = comboBox2.Text;
        price = int.Parse(Quantity2.Text);
        Pizza pizza2 = new Pizza(type, price);
        pizzas[1] = pizza2;

        type = comboBox3.Text;
        price = int.Parse(Quantity3.Text);
        Pizza pizza3 = new Pizza(type, price);
        pizzas[2] = pizza3;

        return pizzas;
    }

    double CalcSubTotal(Pizza[] pizzas)
    {
        double subTotal = 0;
        for (int i = 0; i < 3; i++)
        {
            subTotal += pizzas[i].Price;
        }
        return subTotal;
    }

    double CalcTax(Pizza[] pizzas)
    {
        double tax = 0;
        for (int i = 0; i < 3; i++)
        {
            tax += pizzas[i].Tax;
        }
        return tax;
    }

    double CalcWithTax(Pizza[] pizzas)
    {
        double withTax = 0;
        for (int i = 0; i < 3; i++)
        {
            withTax += pizzas[i].WithTax;
        }
        return withTax;
    }

    void WriteOut(double subTotal, double tax, double withTax)
    {
        lblSubTotal.Text = "" + subTotal;
        lblTax.Text = "" + tax;
        lblTotal.Text = "" + withTax;
    }

    }
}
快速回答:

  • validateAndDeclareQuantilities
    从不返回
    false
    。当您设置“错误输入”时,它应该(可能)返回false

  • (次要)整数[]数量=新整数[3];除了给它写信之外,它从未被使用过

  • (小调)
    var pizzas=新比萨饼[3]也从未使用过。它只是在几行之后被声明覆盖了<代码>披萨[]披萨=空或只是
    披萨[]披萨是更好的选择。但这不是这里最好的结构

  • (次要)在
    Declare
    中名为
    price
    的变量命名不当,因为它看起来实际上是数量。像这样的事情很容易让人反感

  • 注销永远不会被调用<代码>带税
    小计
    OrderButton\u单击
    可能计算正确,但未输出值

较长的答案

这有点乱!我理解这只是一件学习的事情——我们都经历过——但良好的代码卫生与语言的结构同样重要(如果不是更重要的话)

UX:不要覆盖用户输入的内容-特别是不要将文本框输入替换为“错误输入”;最好换个别的牌子。我可以想象,在测试代码时,您已经感觉到这种体验有多么奇怪

命名不需要特定类别的物品:如奶酪比萨和火腿比萨。Enum是你的朋友!使用它们而不是像“奶酪”这样的字符串:

以这种方式使用枚举有助于避免意外的资本化带来的痛苦,而且速度也相当快。有人要奶酪披萨吗

重复:大部分代码也是重复的;你会想要尽可能地练习避免它。(“干”/“不要重复你自己”)。一点前瞻性的计划会有很大的帮助。每个人都对代码结构有偏好;我在这里将是一个单独的“Pizza displayer”类,它包含一个数量输入框,并进行验证

垃圾:与上述内容稍微相关,您正在创建一组列表和数组,这些列表和数组在每次调用函数时创建,然后被丢弃。创建一个更抽象类型的数组(如“Pizza Displayer”数组),并将该数组作为属性保留在表单上。这在这里是次要的,但更清楚地了解程序创建了多少垃圾有助于加快代码的运行速度

关于浮动的注释:你永远不应该使用浮动/双精度来赚钱。用十进制代替,或者用便士做任何事情。浮点数不精确,迟早会遇到取整问题。

快速答案:

  • validateAndDeclareQuantilities
    从不返回
    false
    。当您设置“错误输入”时,它应该(可能)返回false

  • (次要)整数[]数量=新整数[3];除了给它写信之外,它从未被使用过

  • (小调)
    var pizzas=新比萨饼[3]也从未使用过。它只是在几行之后被声明覆盖了<代码>披萨[]披萨=空或只是
    披萨[]披萨是更好的选择。但这不是这里最好的结构

  • (次要)在
    Declare
    中名为
    price
    的变量命名不当,因为它看起来实际上是数量。像这样的事情很容易让人反感

  • 注销永远不会被调用<代码>带税
    小计
    OrderButton\u单击
    可能计算正确,但未输出值

较长的答案

这有点乱!我理解这只是一件学习的事情——我们都经历过——但良好的代码卫生与语言的结构同样重要(如果不是更重要的话)

UX:不要覆盖用户输入的内容-特别是不要将文本框输入替换为“错误输入”;最好换个别的牌子。我可以想象,在测试代码时,您已经感觉到这种体验有多么奇怪

命名不需要特定类别的物品:如奶酪比萨和火腿比萨。Enum是你的朋友!使用它们而不是像“奶酪”这样的字符串:

以这种方式使用枚举有助于避免意外的资本化带来的痛苦,而且速度也相当快。有人要奶酪披萨吗

重复:大部分代码也是重复的;你会想要尽可能地练习避免它。(“干”/“不要重复你自己”)。一点前瞻性的计划会有很大的帮助。每个人都对代码结构有偏好;我在这里将是一个单独的“Pizza displayer”类,它包含一个数量输入框,并进行验证

垃圾:与上述内容稍微相关,您正在创建一组列表和数组,这些列表和数组在每次调用函数时创建,然后被丢弃。创建一个更抽象类型的数组(如“Pizza Displayer”数组),并将该数组作为属性保留在表单上。这在这里是次要的,但更清楚地了解程序创建了多少垃圾有助于加快代码的运行速度

关于浮动的注释:你永远不应该使用浮动/双精度来赚钱。U
namespace Assignment_2
{
class Pizza
{
    string type;
    int quantity;
    public double Price;
    public double SubTotal;
    public double Tax;
    public double WithTax;
    public Pizza(string type, int quantity)
    {
        this.type = type;
        this.quantity = quantity;
        FindPrice();
        CalcSubTotal();
        CalcTax();
        CalcWithTax();
    }
    private void FindPrice()
    {
        switch (type)
        {
            case "Cheese":
                Price = 9.95;
                break;
            case "Vegetables":
                Price = 10.95;
                break;
            case "Meat":
                Price = 11.95;
                break;
        }
    }
    private void CalcSubTotal()
    {
        SubTotal = Price * quantity;
    }
    private void CalcTax()
    {
        Tax = SubTotal * 0.13;
    }
    private void CalcWithTax()
    {
       WithTax = SubTotal + Tax;
    }
}
}
public enum PizzaType{
    Cheese,
    Tomato
}