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

假设类型为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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值