欢迎访问 生活随笔!

尊龙游戏旗舰厅官网

当前位置: 尊龙游戏旗舰厅官网 > 编程语言 > c# >内容正文

c#

c#——ellipse(椭圆)类[继承circle(圆)类][实现icomparable接口、icomparerrt接口]demo -尊龙游戏旗舰厅官网

发布时间:2024/10/5 c# 26 豆豆
尊龙游戏旗舰厅官网 收集整理的这篇文章主要介绍了 c#——ellipse(椭圆)类[继承circle(圆)类][实现icomparable接口、icomparerrt接口]demo 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

定义一个circle类,其功能有:

1)两个double类型属性x和y,可读写圆心坐标

2)一个double类型属性radius,可读写圆的半径

3)一个构造方法,以指定的x,y,radius来构造

4)一个只读属性area,获取圆面积

5)一个只读属性perimeter,获取圆周长

6)一个方法bool contains(double x, double y),如果指定的点(x, y)处于本圆内,返回true

7)一个方法bool contains(circle circle),如果指定的圆circle包含在本圆内,返回true

8)一个方法bool extend(double range, out circle newcircle),半径扩大(加上range),输出扩大后的newcircle,返回true。如果radius range为负,无法扩大,则输出原来的圆,且返回false。

在一个main方法中对上述功能进行测试 

添加一个ellipse(椭圆)类:

1)x, y, majorradius, minorradius属性

2)至少两个ellipse构造方法,一个调用另一个

3)只读属性area

4)实例方法bool contains(double x, double y)

5)实例方法string tostring()

6)让circle类继承ellipse类,将其中的重复代码删去

7)在majorradius, minorradius属性的set访问器中,对value进行检查,如果value<=0,抛出异常(throw new argumentexception("主轴长度不能为负");),并保证majorradius>=minorradius 

在一个main方法中对上述功能进行测试 

1)circle继承icomparable或icomparable,使得circle可比较大小。

在比较时,根据圆半径判定两个圆的大小关系。

2)基于ellipse生成一个比较器类,继承icomparer或icomparer

并添加int类型属性comparetype。

在比较时,如果comparetype为0,比较长轴;为1时,比较短轴;为2时,比较面积。

在一个main方法中对上述功能进行测试 

在main方法中:

1)利用random类生成至少5个circle,放入arraylist或list

调用sort()方法进行排序,输出排序后的元素。

2)利用random类生成至少5个ellipse,放入arraylist或list

调用sort(icomparer)方法进行排序,输出排序后的元素。 

using system; using system.collections.generic; using system.collections; using system.linq; using system.text; using system.threading.tasks;namespace homework {class ellipse{public double x { get; set; }public double y { get; set; }private double _majorradius;public double majorradius{get{return _majorradius;}set{if (value <= 0)return;if (value < _minorradius){_majorradius = _minorradius;_minorradius = value;}else_majorradius = value;}}private double _minorradius;public double minorradius{get{return _minorradius;}set{if (value <= 0)return;if (value > _majorradius){_minorradius = _majorradius;_majorradius = value;}else_minorradius = value;}}public ellipse() : this(0, 0, 2, 1){x = y = 0;majorradius = 2;minorradius = 1;}public ellipse(double x, double y, double major, double minor){x = x;y = y;majorradius = major;minorradius = minor;}public virtual double area{get{return math.pi * majorradius * minorradius;}}public double distanceto(double x, double y){return math.sqrt((x - x) * (x - x) (y - y) * (y - y));}public virtual bool contains(double x, double y){return (x - x) * (x - x) / (majorradius * majorradius) (y - y) * (y - y) / (minorradius * minorradius) < 1;}public override string tostring(){return $"椭圆:圆心在({x}, {y}),主轴半径为{majorradius}, 短轴半径为{minorradius}";}}class ellipsecomparer : icomparer {public int comparetype = 0;public ellipsecomparer():this(0){}public ellipsecomparer(int type) {comparetype = type;}public int compare(ellipse x, ellipse y){if (comparetype == 0){return x.majorradius.compareto(y.majorradius);}else if (comparetype == 1){return x.minorradius.compareto(y.minorradius);}else{return x.area.compareto(y.area);}}}class circle : ellipse, icomparable{public double radius{get{return minorradius;}set{majorradius = value;minorradius = value;}}public circle() : this(0, 0, 1){}public circle(double cx, double cy, double r): base(cx, cy, r, r){radius = r;}public override double area{get { return math.pi * radius * radius; }}public double perimeter{get { return 2 * math.pi * radius; }}public override bool contains(double x, double y){return distanceto(x, y) <= radius;}public bool contains(circle circle){return distanceto(circle.x, circle.y) <= radius - circle.radius;}public bool overlaps(circle circle){return distanceto(circle.x, circle.y) <= radius circle.radius;}public bool extend(double range, out circle newcircle){if (radius range < 0){newcircle = new circle(x, y, radius);return false;}newcircle = new circle(x, y, radius range);return true;}public override string tostring(){return $"圆:圆心在({x}, {y}),半径为{radius}";}public int compareto(object other){return this.radius.compareto(((circle)other).radius);}}/*** circle继承icomparable或icomparable,使得circle可比较大小。* 在比较时,根据圆半径判定两个圆的大小关系。* 基于ellipse生成一个比较器类,继承icomparer或icomparer,* 并添加int类型属性comparetype。* 在比较时,如果comparetype为0,比较长轴;为1时,比较短轴;为2时,比较面积。* 在main方法中,利用random类生成至少5个circle,放入arraylist或list,* 调用sort()方法进行排序,输出排序后的元素。* 利用random类生成至少5个ellipse,放入arraylist或list,* 调用sort(icomparer)方法进行排序,输出排序后的元素。*/class program{static void main(string[] args){random random = new random();arraylist circlelist = new arraylist();for(int i=0; i < 10;i ){circlelist.add(new circle(random.nextdouble(),random.nextdouble(),random.nextdouble()));}console.writeline("圆排序前:");for (int i = 0; i < 10; i ){console.writeline(circlelist[i]);}circlelist.sort();console.writeline("圆排序后:");for (int i = 0; i < 10; i ){console.writeline(circlelist[i]);}list ellipselist = new list();for (int i = 0; i < 10; i ){ellipselist.add(new ellipse(random.nextdouble(), random.nextdouble(), random.nextdouble(),random.nextdouble()));}console.writeline("椭圆排序前:");for (int i = 0; i < 10; i ){console.writeline(ellipselist[i]);}ellipselist.sort(new ellipsecomparer());console.writeline("椭圆排序后:");for (int i = 0; i < 10; i ){console.writeline(ellipselist[i]);}}} }

https://blog.csdn.net/weixin_43272781/article/details/105176909

https://blog.csdn.net/weixin_43272781/article/details/105292114

总结

以上是尊龙游戏旗舰厅官网为你收集整理的c#——ellipse(椭圆)类[继承circle(圆)类][实现icomparable接口、icomparerrt接口]demo的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得尊龙游戏旗舰厅官网网站内容还不错,欢迎将尊龙游戏旗舰厅官网推荐给好友。

网站地图