C#三角形计算和面积计算

时间:2017-01-25 15:09:22

标签: c#

我正在努力解决或指向正确的方向。我很难确定将我的Area公式放在Triangle Class(不是main)中的位置。区域只能有一个' get'而不是'设置'。

接下来的问题是根据输入的一方确定三角形的类型,如果它是一个“正确的”。三角形,附加'类型'用' -right'例如(等腰 - 右)。我有一个三角形类型的枚举。

我不是在寻找解决这个问题的直接答案,而是寻求一些帮助和指导来帮助我更好地培养我的技能

这是我到目前为止在C#中生成的类结构,请记住它不完整。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TriangleCheck;

namespace TriangleCheck
{
    public class Triangle
    {
        private StringBuilder _ErrorMsg;
        private int[] _Sides;
        private const int _nSides = 3;
        private int _Area;

        public Triangle(int[] Sides)
        {
            //Track amunt of errors recieved.
            int nErrors = 0;

            //Make sure ErrorMsg is cleared
            _ErrorMsg = new StringBuilder();

            //Did I get _nSides? If not, append to ErrorMsg and throw exception
            if(Sides.Length != _nSides)
            {
                _ErrorMsg.Append(string.Format("Expected {0} sides but recieved {1}", _nSides, Sides.Length));
                nErrors += 1;
            }

            //Is each side positive? If not, append to ErrorMsg and throw exception
            for (int i = 0; i < Sides.Length; i++)
            {
                if (Sides[i] <= 0)
                {
                    _ErrorMsg.Append(string.Format("{0} side is not a postive integer", Sides[i]));
                    nErrors += 1;
                }
            }

            //Set input from user to private property _Sides
            _Sides = Sides;
            _Area = Area;
        }

        public int Area
        {
            get { return _Area; }
            private set
            {
                int parameter = 
            }
        }


        public string ErrorMsg
        {
            get
            { return ErrorMsg.ToString();}
        }

        public bool IsRight
        {
            get
            {
                return ;
            }
        }

        public int Sides
        {
            get
            { return _Sides; }

            set
            {
                if (value > 0)
                {
                    _Sides = value;
                }
                else
                    throw new ArgumentOutOfRangeException("Value must be postive!");
            }
        }

        public TriangleTypes TriangleTypes
        {
            get
            {
                throw new System.NotImplementedException();
            }

            set
            {
            }
        }

        public void ScaleUp(int[] ScaleFactor)
        {
            throw new System.NotImplementedException();
        }

        public override string ToString()
        {
            return "A Triangle with sides " + _Sides + " is Type: " + TriangleTypes + " with Area:" + Area;
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您提到您无法设置Area属性...看起来您试图通过制作private set来强制执行此操作,但为什么不排除set把它留作只读属性?

区域公式可能会有几个地方;关键是它来自双方,但只有在有人要求时才有意义。所以你可以合理地说:

  • 应用公式并在每次更改时更新内部状态
  • 应用公式并在每次有人对区域
  • 执行get操作时返回值

记住getter和setter是函数的要点是它们可以包含要执行的逻辑(在setter中完全更新内部状态,或者计算只读派生属性的值)。

如果区域计算的表现非常令人担忧,则存在更复杂的模式,但此时我不会深入研究。

至于确定三角形是否正确......如果是,哪一侧必须是斜边?如果三角形是正确的,你知道斜边的长度和其他边的长度之间有什么关系?

答案 1 :(得分:0)

using System;

namespace ConsoleApp
{
    class Program
    {
        static void Main()
        {
            var t = new Triangle(2, 3, 5);

            //var Triangle = new Triangle(2);          // won't compile as no Triangle constructor can be found that takes 1 integer
            //var Triangle = new Triangle(2, 3, 5, 7); // won't compile as no Triangle constructor can be found that takes 4 integers
            //var Triangle = new Triangle(2, -3, 5);   // won't compile as the 2nd value is negative - and we've asked for unsigned for all 3 values

            Console.WriteLine("The triangle ({0}, {1}, {2}) has an area of {3}.", t.A, t.B, t.C, t.area());

            Console.ReadKey();
        }
    }

    public class Triangle
    {
        public uint A { get; set; }
        public uint B { get; set; }
        public uint C { get; set; }

        public Triangle(uint a, uint b, uint c)
        {
            this.A = a;
            this.B = b;
            this.C = c;
        }

        public uint area()
        {
            return A * B * C; // this needs fixing ...
        }
    }
}

这大致不是你想要用Triangle类实现的 - 一种阻止它被错误地用于极少或不正确类型的参数的方法。这个只允许3个正(uint)整数。没有别的东西可以补充 - 这就是你想要的。对不起,如果我误解了。