【发布时间】: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)...;我可以有一个 square 和Length!=Width? -
你的方法不能用于计算梯形面积。梯形需要三个参数
-
CalculateSurfaceArea()不应采用任何参数。相反,它应该依赖于对象字段。参数(如果有)应该在形状的构造期间。参数的数量应根据形状而有所不同。即Circle只需要一个;Rectangle需要 两个