您的位置:首页 > 其它

设计一个接口,返回一组三角形的有序的数据集合

2015-07-23 10:41 465 查看
假设类型为string的一组数据格式如下:

[{“a”:”1”,”b”:”1”,”c”:”3”},{“a”:”2”,”b”:”1”,”c”:”2”},{“a”:”5”,”b”:”9”,”c”:”3”},…… ,{“a”:”3”,”b”:”4”,”c”:”5”},{“a”:”6”,”b”:”3”,”c”:”3”}]

请您根据以上的数据,设计一个接口,返回一组三角形的有序的数据集合,排序规则是:等边三角形->等腰三角形->普通三角形的数据集。请用面向对象的设计,来实现这个程序。

1、定义一个接口:

public interface ITriangleService
{
string GetTriangle(string jsonStr);
}
2、接口实现:

<pre name="code" class="csharp">public class TriangleService : ITriangleService
{
private List<Triangle> tiangles;

private string triangleStr;

public string GetTriangle(string jsonStr)
{
if (!string.IsNullOrWhiteSpace(jsonStr))
{
tiangles = new List<Triangle>();

List<ThreeSide> threeSide = new List<ThreeSide>();

threeSide = JsonConvert.DeserializeObject<List<ThreeSide>>(jsonStr);
//threeSide = JSON.ToObject<List<ThreeSide>>(jsonStr);

if (threeSide.Count > 0)
{
Triangle equilateral = new Triangle(TriangleCategory.Equilateral,new List<ThreeSide>()); //equilateral Triangle
Triangle isosceles = new Triangle(TriangleCategory.Isosceles, new List<ThreeSide>()); //isosceles Triangle
Triangle right = new Triangle(TriangleCategory.Right, new List<ThreeSide>()); //right Triangle
Triangle ordinary = new Triangle(TriangleCategory.Ordinary, new List<ThreeSide>()); //ordinary Triangle
Triangle notTriangle = new Triangle(TriangleCategory.Not, new List<ThreeSide>()); //notTriangle
foreach(ThreeSide ts in threeSide)
{
if (JudgeTriangle(ts)) //true:is a triangle
{
if (JudgeEquilateral(ts))
equilateral.ThreeSide.Add(ts);
else if (JudgeIsosceles(ts))
isosceles.ThreeSide.Add(ts);
else if (JudgeRight(ts))
right.ThreeSide.Add(ts);
else
ordinary.ThreeSide.Add(ts);
}
else//not a triangle
{
notTriangle.ThreeSide.Add(ts);
}
}

if (equilateral.ThreeSide.Count()>0)
tiangles.Add(equilateral);
if (isosceles.ThreeSide.Count() > 0)
tiangles.Add(isosceles);
if (right.ThreeSide.Count() > 0)
tiangles.Add(right);
if (ordinary.ThreeSide.Count() > 0)
tiangles.Add(ordinary);
if (notTriangle.ThreeSide.Count() > 0)
tiangles.Add(notTriangle);

triangleStr = JsonConvert.SerializeObject(tiangles);
//triangleStr = JSON.ToJSON(tiangles);
}
else
{
triangleStr = "Json format is error!";
}
}
else
{
triangleStr = "Json is null!";
}
return triangleStr;
}

private bool JudgeRight(ThreeSide ts)
{
return ts.c * ts.c + ts.a * ts.a == ts.b * ts.b || ts.c * ts.c + ts.b * ts.b == ts.a * ts.a || ts.a * ts.a + ts.b * ts.b == ts.c * ts.c;
}

private bool JudgeIsosceles(ThreeSide ts)
{
return (ts.a == ts.b || ts.c == ts.b || ts.a == ts.c) && !JudgeEquilateral(ts);
}

private bool JudgeEquilateral(ThreeSide ts)
{
return ts.c == ts.a && ts.c == ts.b && ts.a == ts.c;
}

private bool JudgeTriangle(ThreeSide ts)
{
return ts.c + ts.a > ts.b && ts.c + ts.b > ts.a && ts.a + ts.b > ts.c;
}

}
</pre><pre name="code" class="csharp"><pre name="code" class="csharp">3、在接口中用到的类和枚举
[Serializable]
public class Triangle
{
private TriangleCategory category;
List<ThreeSide> threeSide;

public Triangle(TriangleCategory c,List<ThreeSide> ts)
{
this.Category = c;
this.ThreeSide = ts;
}

public TriangleCategory Category
{
get { return category; }
set { category = value; }
}
public List<ThreeSide> ThreeSide
{
get { return threeSide; }
set { threeSide = value; }
}
}

[Serializable]
public class ThreeSide
{
public int a { get; set; }
public int b { get; set; }
public int c { get; set; }
}


枚举:


<pre name="code" class="csharp"> public enum TriangleCategory
{
Equilateral, Isosceles,Right,Ordinary,Not
}



</pre><pre>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  实例 设计