2016-07-16 147 views
0

一个朋友最近进行了电话采访,他被问了一个技术问题:2D的计算面积形状

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; 
     } 
    } 

} 

面试官说,他 “挣扎” 与测试。代码有什么问题?

+0

为什么使用Windows形式如果结果将在控制台被打印? – Fabio

+0

pi是一个常量,为什么它作为一个参数传递并且不正确地平方? – jdweng

+0

所以我可以指定'pi = -15.789'? '... CalculateSurfaceArea(double pi,double radius)...';我可以用'长度'!='宽度'来设置*正方形? –

回答

0

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

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

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方法