我有以下练习: 定义一个名为circle的类,它接受point类型的对象,并计算它们与圆心的距离。如果该点在圆圈之外,则应发送异常通知。
这是我的代码:
class Point
{
protected int x,y;
public Point(int x,int y)
{
this.x = x;
this.y = y;
}
}
class Circle : Point
{
public Circle(Point p,int radius):base(3,5)
{
}
}
class Program
{
static void Main(string[] args)
{
}
}
我不知道我在圆圈课上要做什么,我怎么知道圆点是否在圆圈内? 谢谢大家。
答案 0 :(得分:7)
定义一个名为circle的类,它接受point类型的对象,并计算它们与圆心的距离。如果该点在圆圈之外,则应发送异常通知。
继承与构成:首先,您的班级Circle
来自Point
似乎是错误的,因为您需要x
和{{1你圈子的坐标对也是如此。请记住,继承通常会模拟“is-a”关系。但圈子不是积分。相反,可以说它们可以通过点(中心)和半径来定义。因此,使用组合(“has-a”关系)更符合逻辑:
y
何时使用例外(以及何时不使用):其次,我希望那些给你练习的人实际上并不是因为你的距离计算而class Circle
{
Point center;
double radius;
}
例外方法得到一个位于圆圈外的throw
。我会认为这种使用例外无效。例外情况应该用于某些情况,即您的代码无法正确处理的情况。但是,计算两点之间的距离永远不会失败(除非可能出现溢出或下溢等奇怪的浮点问题):
Point
如果突然有这样的方法引发了异常,那么代码的许多用户可能会认为这不合逻辑。为什么这个方法超出了它的名字所暗示的范围,只是因为距离大于double DistanceFromCentreTo(Point p)
{
// See e.g. http://en.wikipedia.org/wiki/Pythagorean_theorem:
return Math.Sqrt((center.x - p.x) * (center.x - p.x) +
(center.y - p.y) * (center.y - p.y));
}
而引发异常?
IMO更可取的是引入第二种方法:
radius
现在,您有两种方法可以满足大多数人的期望,不会抛出意外的异常,并且仍然提供您最有可能需要的所有功能。
PS:多天后阅读我的答案,我突然觉得最好定义bool LiesWithinCircle(Point p)
{
return DistanceFromCentreTo(p) <= radius;
}
类上面显示的两种方法,例如:
Point
...这导致更容易理解的代码;例如double DistanceToCenterOf(this Point p, Circle c) { … }
bool LiesWithin (this Point p, Circle c) { … }
代替somePoint.LiesWithin(someCircle)
。
答案 1 :(得分:2)
我怎么知道这一点是否在 是否圈?
答案 2 :(得分:1)
这将告诉您是否在圈内:
class Point
{
protected int x,y;
public Point(int x,int y)
{
this.x = x;
this.y = y;
}
public int X { get { return x; } }
public int Y { get { return y; } }
}
圆圈的构造函数中的:
public Circle(Point p,int radius):base(3,5)
{
if ( Math.Sqrt( Math.Pow( p.X - this.X, 2.0) + Math.Pow( p.Y - this.Y, 2.0)) > radius )
throw new ArgumentException("This point is outside the circle");
}
答案 3 :(得分:1)
应该是这样的,假设你只询问异常并且已经知道计算距离所涉及的逻辑:
class Circle
{
public Circle(Point p,int radius)
{
//code to construct the circle here..
}
public double DistanceFromCenter(Point p)
{
if (p is outside circle)
throw new Exception("Point " + p + " is outside the circle");
//calculate the distance and return it...
}
}
答案 4 :(得分:0)
如果x ^ 2 + y ^ 2 &lt; = R ^ 2
,则原点上半径为R的圆为x^2+y^2=R^2
该点为圆形