我正在努力解决或指向正确的方向。我很难确定将我的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;
}
}
}
答案 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)整数。没有别的东西可以补充 - 这就是你想要的。对不起,如果我误解了。