习题:设计一个圆Circle类,包含圆心和半径两个数据成员。①编写合理的构造方法。

完整题干:

设计一个圆Circle类,包含圆心和半径两个数据成员。

①编写合理的构造方法。

②编写计算圆面积的方法getArea()。

③编写计算圆是否包含指定的点contains(Point),contains(int x,int y)。

个人答案:

(1)python版本

import math
class Circle:
    def __init__(self,location,r):     #定义圆心和半径
        self.location =location
        self.r=r
    def GetGirth(self):       #周长的计算
        return 2*3.14*self.r
    def GetArea(self):        #面积的计算
        return 3.14*self.r*self.r
myCircle=Circle((200,200),10)        #圆心为(200,200),半径为10
print("圆的周长=%0.2f"%(myCircle.GetGirth()))
print("圆的面积=%0.2f"%(myCircle.GetArea()))
(x,y)=eval(input("请你输入坐标:"))     #计算圆是否包含指定的点
s=x**2+y*y
if s<=100:   #设定的半径为10
print("该坐标在该半径的圆内")
else:
print("该坐标不在该半径的圆内")

 

 (2)java版本

class Point { //定义Point类

    private double x;

    private double y;

    Point(double x1, double y1) { //构造方法point,接收两个双精度类型数据x1、y1

        x = x1;

        y = y1;

    }

    public double getX() { return x; } //公用方法getX return给x值

    public double getY() { return y; } //公用方法getY return给y值

    public void setX(double i) { x = i; } //公用方法setX 接收一个双精度i,赋值给x

    public void setY(double i) { y = i; } //公用方法setY 接收一个双精度i,赋值给y

}

 

public class Circle1 { //主类TestCircle

    public static void main(String args[]) { //主方法main

       //问题1.计算圆面积的方法

        Circle c1 = new Circle(new Point(1.0,2.0), 2.0); //新建一个Circle类型对象c1,圆心(1,2)和半径2

        Circle c2 = new Circle(5.0); //新建一个Circle类型对象c2,圆心(0,0)半径5

        System.out.println("c1:("+c1.getO().getX()+","

                +c1.getO().getY()+"),"+c1.getRadius()); //输出c1的初始信息

        System.out.println("c2:("+c2.getO().getX()

                +","+c2.getO().getY()+"),"+c2.getRadius());//输出c2的初始信息

        System.out.println("c1 area = "+c1.area());//c1和c2的面积

        System.out.println("c2 area = "+c2.area());

        //问题2.编写计算圆是否包含指定的点

        c1.setO(5,6);

        c2.setRadius(9.0);

        System.out.println("c1:("+c1.getO().getX()+","

                +c1.getO().getY()+"),"+c1.getRadius());

        System.out.println("c2:("+c2.getO().getX()+","

                +c2.getO().getY()+"),"+c2.getRadius());

        System.out.println("c1 area = "+c1.area());

        System.out.println("c2 area = "+c2.area());

        Point p1 = new Point(5.0, 6.0);//新建一个点P1,计算他是否在圆内

        System.out.println(c1.contains(p1));

        System.out.println(c2.contains(new Point(10.0,9.0)));



    }



}

 

class Circle { //定义Circle类

    private Point o; //定义Ponint类型对象o

    private double radius;

    Circle(Point p, double r) //构造方法Circle,接收一个Point类型p,双精度类型r

    {

        o = p; //Point类型赋值给o

        radius = r; //双精度类型r赋值给radius

    }



    Circle(double r) { //构造方法Circle的重载,接收一个双精度r

        o = new Point(0.0, 0.0); //给point类型对象o赋值,分配堆内存

        radius = r; //双精度类型r赋值给radius

    }

    boolean contains(Point p) { //布尔类型 contains,接收point类型p的值

        double x = p.getX() - o.getX(); //调用对象p的getX方法接收的值减对象o的getX方法接收的值

        double y = p.getY() - o.getY(); //调用对象p的getY方法接收的值减对象o的getY方法接收的值

        if(x*x + y*y > radius * radius) return false; //假如x的平方和y的平方的和小于radius的平方,返回false,否则为true;

        else return true;

    }

    public void setO(double x, double y) { //接收两个双精度值x、y

        o.setX(x); //x赋值给o对象setX方法

        o.setY(y); //y赋值给o对象setY方法

    }

    public Point getO() { return o; } //geto 方法,返回给o一个值

    public double getRadius() { return radius;} //getRadius方法,返回一个双精度radius

    public void setRadius(double r) { radius = r;} //tRadius方法,接收一个双精度r,赋值给radius

    public double area() { //area方法,返回3.14*radius*radius的值

        return 3.14 * radius * radius;

    }

}

参考答案:

package chap4.excercise.Ex67;



public class Point {

	private int x;

	private int y;

 

	public Point(int x, int y){

		this.x = x;

		this.y = y;

	}

	

	/**

	 *重载的构造器 初始化对角线上的点

	 **/

	public Point(int x){

        this(x,x);//调用本类的两个整数类型参数的构造器

    }

	

	/**

	 *  计算当前点到原点的距离 

	 * */

	public double distance(){ //当前点就是this

		return Math.sqrt(this.x*this.x + this.y*this.y); 

	}

	/**

	 *计算当前点到另外一个坐标的距离

	 */

	public double distance(int x, int y){

		return Math.sqrt((this.x-x)*(this.x-x)+(this.y-y)*(this.y-y));

	}

	

	/** 

	 * 计算当前点到另外一点的距离 

	 * */

	public double distance(Point other){

		//重用本类的方法

		return this.distance(other.x, other.y);

	}



	public int getX() {

		return x;

	}



	public void setX(int x) {

		this.x = x;

	}



	public int getY() {

		return y;

	}



	public void setY(int y) {

		this.y = y;

	}

	

}





package chap4.excercise.Ex67;



public class Circle {

	private Point center;  //圆心

	private double r;  	//半径

	

	public Circle() {

		super();

		// TODO Auto-generated constructor stub

	}

	public Circle(Point center) {

		this.center = center;

	}

	public Circle(Point center, double r) {

		this(center);

		this.r = r;

	}

	

	public double getArea(){

		return Math.PI * r *r;

	}

	

	/**

	 * 判断指定的点是否在圆内

	 * @param Point  

	 */

	public boolean contains(Point p){

		if(center.distance(p)<r){

			return true;

		}

		return false;

	}

	

	/**

	 * 判断指定的点是否在圆内

	 * @param int,int

	 */

	public boolean contains(int x, int y){

		if(center.distance(x, y)<r){

			return true;

		}

		return false;

	}

	public Point getCenter() {

		return center;

	}

	public void setCenter(Point center) {

		this.center = center;

	}

	public double getR() {

		return r;

	}

	public void setR(double r) {

		this.r = r;

	}	

	

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellenionia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值