Java作业01 2019/9/25

作业内容

*在画图软件中,可以画出不同大小或颜色的圆形、矩形等几何图形。几何图形之间有许多共同的特征,如它们可以是用某种颜色画出来的,可以是填充的或者不填充的。此外还有些不同的特征,比如,圆形都有半径,可以根据半径计算圆形的面积和周长,矩形都有宽和高,可以根据宽高来计算矩形的面积和周长。
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,来代表比较结果,当前对象大、两者相等或者当前对象小。再次提醒,此题涉及的代码全部展示在此题的题号下,与上一题相独立。*

circle类

package 大三的作业1;

public class Circle extends Model{
	double radius;
	String pencilColor;
	boolean isOfFull;
	double area;
	double premeter;
	public Circle(double radius, String pencilColor, boolean isOfFull) {
		super();
		this.radius = radius;
		this.pencilColor = pencilColor;
		this.isOfFull = isOfFull;
	}
	@Override
	public double getArea() {
		// TODO 自动生成的方法存根
		area = radius*radius*Math.PI;
		return area;
	}
	@Override
	public double getPremeter() {
		// TODO 自动生成的方法存根
		premeter = 2*radius*Math.PI;
		return premeter;
	}
	@Override
	public String toString() {
		return "Circle [radius=" + radius + ", pencilColor=" + pencilColor + ", isOfFull=" + isOfFull + ", 面积是="+getArea()+", 周长是="+getPremeter()+"]";
	}
	
}

reactangle类

package 大三的作业1;

public class Rectangle  extends Model{
	double width;
	double height;
	String pencilColor;
	boolean isOfFull;
	double area;
	double premeter;
	public Rectangle(double width, double height, String pencilColor, boolean isOfFull) {
		super();
		this.width = width;
		this.height = height;
		this.pencilColor = pencilColor;
		this.isOfFull = isOfFull;
	}
	@Override
	public double getArea() {
		// TODO 自动生成的方法存根
		area  = width*height;
		return area;
	}
	@Override
	public double getPremeter() {
		// TODO 自动生成的方法存根
		premeter =  (2*width)+(2*height);
		return premeter;
	}
	@Override
	public String toString() {
		return "Rectangle [width=" + width + ", height=" + height + ", pencilColor=" + pencilColor + ", isOfFull="
				+ isOfFull +  ", 面积是="+getArea()+", 周长是="+getPremeter()+"]";
	}
	
}

square类

package 大三的作业1;

public class Square  extends Model{
	double width;
	String pencilColor;
	boolean isOfFull;
	double area;
	double premeter;
	public Square(double width, String pencilColor, boolean isOfFull) {
		super();
		this.width = width;
		this.pencilColor = pencilColor;
		this.isOfFull = isOfFull;
	}
	@Override
	public double getArea() {
		// TODO 自动生成的方法存根
		area = width*width;
		return area;
	}
	@Override
	public double getPremeter() {
		// TODO 自动生成的方法存根
		premeter = width*4;
		return premeter;
	}
	@Override
	public String toString() {
		return "Square [width=" + width + ", pencilColor=" + pencilColor + ", isOfFull=" + isOfFull + ", 面积是="+getArea()+", 周长是="+getPremeter()+"]";
	}
	
}

Model图形类

package 大三的作业1;

public abstract class Model implements Comparable{
	double area;
	public abstract double getArea();
	public abstract double getPremeter();
	public int compareTo(Model model) {
		if(getArea() >= model.getArea()) {
		return 1;
		}else if(getArea()  == model.getArea()) {
		return 0;
		}else if(getArea()  < model.getArea()) {
		return -1;
		}
		return 0;
		
	}
}

Comparable接口类

package 大三的作业1;

interface Comparable {
	public int compareTo(Model model);
}

最后是主类也就是画图测试类Draw

package 大三的作业1;

import java.util.Arrays;

public class Draw {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Model circle = new Circle(3.0, "绿色", true);
		Model square = new Square(4.0, "黄色", false);
		Model rectangle = new Rectangle(10.0, 5.0, "红色", false);
		
		System.out.println(circle.toString());
		System.out.println(square.toString());
		System.out.println(rectangle.toString());
		
		Model[] model = new Model[3];
		model[0] = circle;
		model[1] = square;
		model[2] = rectangle; 
		for(int i=0;i<=model.length-1;i++) {
			System.out.println(model[i].getArea());
		}

		for(int i=0;i<=model.length-1;i++) {
			for(int j=i+1;j<=model.length-1;j++){
			if(model[i].compareTo(model[j]) == 1) {
				System.out.println(1);
			}else if(model[i].compareTo(model[j]) == 0) {
				System.out.println(0);
			}else if(model[i].compareTo(model[j]) == -1) {
				Model temp = model[i];
				model [i] = model[j];
				model[j] = temp;
				System.out.println(-1);
			}
			}
		}
		for(int i=0;i<=model.length-1;i++) {
			System.out.println(model[i].getArea());
		}
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值