题目如下:
这是一段用于计算多个几何形状面积之和的程序
- 指出程序段存在的不妥之处,并重构代码
- 在 1 的基础上增加一种可计算的几何形状类型三角形,其面积为 底×高×1/2
public class Shape
{
public int Type { get; set; }
public int Radius { get; set; }
public int Width { get; set; }
public int Length { get; set; }
}
public class ShapeCalculator
{
public static double CalculateTotalArea(List<Shape> shapes)
{
double totalArea = 0;
if (shapes != null && shapes.Count() > 0)
{
foreach (Shape shape in shapes)
{
if (shape.Type == 1)
{
totalArea += Math.PI * shape.Radius * shape.Radius;
}
else if (shape.Type == 2)
{
totalArea += shape.Length * shape.Width;
}
}
}
return totalArea;
}
}
我的回答是这样的:
interface ICalc
{
double GetAera();
}
class Circle : ICalc
{
public int Radius { get; set; }
public double GetAera()
{
return Math.PI * Radius * Radius;
}
}
class Rectangle : ICalc
{
public int Length { get; set; }
public int Width { get; set; }
public double GetAera()
{
return Length * Width;
}
}
class Triangle : ICalc
{
public int Bottom { get; set; }
public int Height { get; set; }
public double GetAera()
{
return Bottom * Height * 0.5;
}
}
class ShapeCalculator
{
public static double CalculateTotalArea(List<ICalc> shapes)
{
double totalArea = 0;
if (shapes != null)
{
totalArea = shapes.Sum(shape => shape.GetAera());
}
return totalArea;
}
}
凭我的水平和理解能力就只有写到这种程度了……有什么更好的写法吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.