【问题标题】:Calculate Surface Area of 2D shapes计算二维形状的表面积
【发布时间】:2016-07-16 11:28:32
【问题描述】:

一位朋友最近接受了电话采访,被问到一个技术问题:

Q) 如果我想计算一些 2D 形状的表面积,那么我会使用什么“桶”。他有 20 分钟的时间写一些代码,面试官给他回了电话。他通过电子邮件发送了代码,在剩下的采访中没有讨论代码(没有其他技术问题)。他给我发了代码:

Windows 窗体应用

namespace ShapesApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.Load += form_load;
        }

        public void form_load (Object o, EventArgs e)
        {
            List<Shape> listShape = new List<Shape>();
            Shapes.Circle circle = new Shapes.Circle();
            Shapes.Rectangle rectangle = new Shapes.Rectangle();
            Shapes.Square square = new Shapes.Square();
            Shapes.Triangle triangle = new Shapes.Triangle();
            listShape.Add(rectangle);
            listShape.Add(square);
            listShape.Add(triangle);

            foreach (Shape shape in listShape)
            {
                double a = 10;
                double b = 10;
                double surfaceArea = shape.CalculateSurfaceArea(a,b);
                Console.WriteLine("The surface area of a " + shape.GetType() + " is: " + surfaceArea);
            }
        }

    }
}

形状 - 类库

namespace Shapes
{
    public abstract class Shape
    {
        abstract public double CalculateSurfaceArea(double Double1, double Double2);
    }

    public class Circle : Shape
    {
        public override double CalculateSurfaceArea(double pi, double radius)
        {
            return (pi * radius) * (pi * radius);
        }
    }

    public class Triangle : Shape
    {
        public override double CalculateSurfaceArea(double Base, double Height)
        {
            return (Base*Height)/2;
        }
    }

    public class Rectangle : Shape
    {
        public override double CalculateSurfaceArea(double Length, double Width)
        {
            return Length * Width;
        }
    }

}

面试官说他在考试中“挣扎”。代码有什么问题?

【问题讨论】:

  • 如果结果将在控制台中打印,为什么要使用 Windows 表单?
  • pi 是一个常数,为什么它作为参数传递并错误地平方?
  • 所以我可以分配pi = -15.789...CalculateSurfaceArea(double pi, double radius)...;我可以有一个 squareLength != Width?
  • 你的方法不能用于计算梯形面积。梯形需要三个参数
  • CalculateSurfaceArea() 不应采用任何参数。相反,它应该依赖于对象字段。参数(如果有)应该在形状的构造期间。参数的数量应根据形状而有所不同。即Circle只需要一个Rectangle 需要 两个

标签: c# .net winforms


【解决方案1】:

计算面积是行为,每个形状都有自己的计算公式。因为计算面积可以涉及到不同数量的变量,而常量方法不会带任何参数,变量将是实现接口的类的关注。

所以我认为计算面积的方法可以抽象为接口:

public interface ICalculatingArea
{
    double CalculateArea();
}

然后每个形状都会以自己的方式实现它。

public class Rectangle:ICalculatingArea
{

    public double Width {get; set;}
    public double Length {get; set;}

    public double CalculateArea()
    {
        return Length * Width;
    }
}

在主程序中将形状类转换为接口类型并使用CalculateArea方法就足够了

【讨论】:

    猜你喜欢
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 2013-08-12
    相关资源
    最近更新 更多