解决图形面积、周长的问题

在画图软件中,可以画出不同大小或颜色的圆形、矩形等几何图形。几何图形之间有许多共同的特征,如它们可以是用某种颜色画出来的,可以是填充的或者不填充的。此外还有些不同的特征,比如,圆形都有半径,可以根据半径计算圆形的面积和周长,矩形都有宽和高,可以根据宽高来计算矩形的面积和周长。
1、编写Java程序。
(1)使用继承机制,分别设计实现抽象基类图形类,派生类圆形类、正方形类、长方形类,要求:
①抽象图形类中有属性画笔颜色、图形是否填充,有方法获取图形面积、获取图形周长等;
②使用构造方法为其成员属性赋初值;
③在每个派生类中都重写toString()方法,返回所有属性的信息;
④根据文字描述合理设计类的其他成员属性和方法。
(2)设计实现画板类,要求:
①画一个红色、无填充、长和宽分别为10.0与5.0的长方形;
②画一个绿色、有填充、半径为3.0的圆形;
③画一个黄色、无填充、边长为4.0的正方形;
④分别求三个对象的面积和周长,并将每个对象的所有属性信息打印到控制台。

2、基于上题背景,设计实现以下程序:
(1)设计Comparable接口,接口中设计compareTo()方法,用来比较对象。此方法的返回值类型设计为int类型。此方法接收一个参数,参数类型为图形类。
(2)在图形类中实现compareTo()方法,用来比较两个图形的面积大小。
(3)在测试类中,创建图形类的数组,数组中存放多个圆形、正方形、长方形对象,使用compareTo()方法找出数组中面积最大的图形。
提示:比较对象时,可以将compareTo()方法的返回值设置为1、0、-1,来代表比较结果,当前对象大、两者相等或者当前对象小。再次提醒,此题涉及的代码全部展示在此题的题号下,与上一题相独立。
graphical.class

package com.graphicals;
  /**
   * 
    * <p>Title: graphical</p> 
    * <p>Description:抽象类的图形类 </p> 
    * @author linian 
    * @date 2019年9月26日
   */
public abstract class graphical implements comparable{
	/**
	 * 定义两个抽象方法
	 * @return
	 */
   public abstract double area();
   public abstract double girth();
   
   public int compareTo(graphical graphical) {
	
	if (this.area()>graphical.area()) {
		return 1;
	} else if (this.area()<graphical.area()) {
		return -1;
	}
	return 0;
 }
}

circular.class

package com.graphicals;
 /**
  * 
   * <p>Title: circular</p> 
   * <p>Description:圆形类 </p> 
   * @author linian 
   * @date 2019年9月26日
  */
public class circular extends graphical{
   private double raidus;
   public circular(double raidus) {
	this.raidus=raidus;
}
	@Override
	public double area() {
		// TODO 自动生成的方法存根
		return Math.PI*raidus*raidus;
	}

	@Override
	public double girth() {
		// TODO 自动生成的方法存根
		return Math.PI*2*raidus;
	}

}

Rectangle.class

package com.graphicals;
 /**
  * 
   * <p>Title: Rectangle</p> 
   * <p>Description:长方形类 </p> 
   * @author linian 
   * @date 2019年9月27日
  */
public class Rectangle extends graphical {
	private double length;
    private double width;
    
    public Rectangle() {    	
    }
    public Rectangle(double length,double width) {
    	this.length=length;
    	this.width=width;
    }
	@Override
	public double area() {
		// TODO 自动生成的方法存根
		return length*width;
	}

	@Override
	public double girth() {
		// TODO 自动生成的方法存根
		return (length+width)*2;
	}

	public double getLength() {
		return length;
	}

	public void setLength(double length) {
		this.length = length;
	}

	public double getWidth() {
		return width;
	}

	public void setWidth(double width) {
		this.width = width;
	}

}

Square.class

package com.graphicals;
 /**
  * 
   * <p>Title: Square</p> 
   * <p>Description: 正方形类</p> 
   * @author linian 
   * @date 2019年9月26日
  */
public class Square extends graphical{
     private double side;
     public Square(double side) {
		this.side=side;
	}
	public double area() {
		// TODO 自动生成的方法存根
		return side*side;
	}

	public double girth() {
		// TODO 自动生成的方法存根
		return side*4;
	}
	public double getSide() {
		return side;
	}
	public void setSide(double side) {
		this.side = side;
	}

}

interface comparable

package com.graphicals;

public interface comparable {
  public int compareTo(graphical graphical);
}

TestGraph.class

package com.graphicals;

public class TestGraph {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
    graphical circular= new circular(3.0);
    graphical square=new Square(4.0);
    graphical rectangle=new Rectangle(3.0,4.0);
    System.out.println("圆的面积"+circular.area());
    System.out.println("圆的周长"+circular.girth());
    System.out.println("长方形的面积"+rectangle.area());
    System.out.println("长方形的周长"+rectangle.girth());
    System.out.println("正方形的面积"+square.area());
    System.out.println("长方形的周长"+square.girth());
	}

}

Test2Graph.class

package com.graphicals;

public class Test2Graph {
 public static void main(String[] args) {
	 graphical[] gra = new graphical[10];
		for(int i=0;i<3;i++){
			circular c = new circular(2.0+i);
			gra[i] = c;
		}
		for(int i=3;i<7;i++){
			Square s = new Square(3.0+i);
			gra[i] = s;
		}
		for(int i=7;i<10;i++){
			Rectangle r = new Rectangle(3.0+i,4.0+i);
			gra[i] = r;
		}
		graphical max=gra[0];
		for(int i=0;i<gra.length;i++){
			if(gra[i].area()>max.area()){
				max = gra[i];
			}
		}
		System.out.println(max.area());
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值