admin 管理员组

文章数量: 1086866

几何图形GeometricObject类

 

4.(可着色接口Colorab1e)设计一个名为Colorable的接口,其中有名为howToColorO的void方法。可着色对象的每个类必须实现Colorab1e接口。设计一个名为Square的类,继.承自GeometricObject类并实现Colorab1e接口。实现howToColor方法,显示一个消息Color a11 four sides (给所有的四条边着色)。设计一个名为Circle的类,承自GeometricObject类,并实现所有抽象的方法。

画出包含Colorable, Square,Circle和GeometricObject的UML图。编写一个测试程序,创建有五个GeometricObject对象的数组。对于数组中的每个对象而言,如果对象是可着色的,那就调用howToColor方法。

5.(八边形类Octagon)编写一个名为Octagon的类,它继承自GeometricObject类并实现Comparable和Cloneable接口。假设八边形八条边的边长都相等。它的面积可以使用下面的公式计算:

画出包括Octagon、GeometricObject、Comparable和Cloneable的UML图。编写一个测试程序,创建一个边长值为5的Octagon对象,然后显示它的面积和周长。使用clone方法创建一个新对象,并使用compareTo方法比较这两个对象。

package 几何图形;
import java.util.Comparator;
import java.util.Date;abstract class GeometricObject implements Comparable<GeometricObject>,Comparator<GeometricObject>{private String color;private boolean filled;private Date dateCreated;protected GeometricObject(){}protected GeometricObject(String color,boolean filled){this.color=color;this.filled=filled;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public boolean isFilled() {return filled;}public void setFilled(boolean filled) {this.filled = filled;}public Date getDateCreated() {return dateCreated;}public abstract double getArea();public abstract double getPerimeter();@Overridepublic int compareTo(GeometricObject geometricObject) {double x=this.getArea()-geometricObject.getArea();if(x>0)return 1;else if(x<0)return -1;else return 0;}@Override//这个比较器没用,用上面那个自然序了。public int compare(GeometricObject o1, GeometricObject o2) {return (int) (o1.getArea()-o2.getArea());}
}
package 几何图形;public interface Colorable {public abstract void howToColorO();
}

 

package 几何图形;import 几何图形.GeometricObject;public class Triangle extends GeometricObject{private  double a;private  double b;private  double c;public Triangle() {}public Triangle(double a, double b, double c, String color, boolean filled) {super(color,filled);this.a = a;this.b = b;this.c = c;}public double getA() {return a;}public void setA(double a) {this.a = a;}public double getB() {return b;}public void setB(double b) {this.b = b;}public double getC() {return c;}public void setC(double c) {this.c = c;}@Overridepublic String toString() {return "三角形:"+"边长:"+getA()+"\t"+getB()+"\t"+getC()+"\t\t"+"面积:"+getArea()+"\t\t\t\t\t\t周长:"+getPerimeter()+"\t\t\t\t颜色"+getColor()+"\t\t填充"+isFilled();}public double getArea() {double s =(a+b+c)/2f;double S = Math.sqrt(s*(s-a)*(s-b)*(s-c));return S;}public double getPerimeter() {return a+b+c;}
}
package 几何图形;public class Square extends GeometricObject implements Colorable{private  double a;public Square(double a,String color, boolean filled) {super(color, filled);this.a = a;}public double getA() {return a;}public void setA(double a) {this.a = a;}@Overridepublic double getArea() {return a*a;}@Overridepublic double getPerimeter() {return 4*a;}@Overridepublic void howToColorO() {System.out.println("Color a11 four sides (给正方形所有的四条边着色)");}@Overridepublic String toString() {howToColorO();return "正方形:"+"边长:"+getA()+"\t\t\t\t面积:"+getArea()+"\t\t\t\t\t\t周长:"+getPerimeter()+"\t\t\t\t颜色"+getColor()+"\t\t填充"+isFilled();}}

 

package 几何图形;public class Octagon extends GeometricObject implements Cloneable{private double a;public Octagon(double a, String color, boolean filled) {super(color, filled);this.a = a;}public Octagon(double a) {this.a = a;}public double getA() {return a;}public void setA(double a) {this.a = a;}@Overridepublic double getArea() {return (2+4/Math.sqrt(2))*a*a;}@Overridepublic double getPerimeter() {return 8*a;}@Overridepublic String toString() {return "八边形:"+"边长:"+getA()+"\t\t\t\t面积:"+getArea()+"\t\t\t周长:"+getPerimeter()+"\t\t\t\t颜色"+getColor()+"\t\t\t填充"+isFilled();}@Overridepublic Object clone() throws CloneNotSupportedException {return super.clone();}
}
package 几何图形;public class Circle extends GeometricObject{private double r;public Circle() {}public Circle(double r,String color, boolean filled) {super(color, filled);this.r = r;}@Overridepublic double getArea() {return Math.PI*r*r;}@Overridepublic double getPerimeter() {return Math.PI*2*r;}public double getR() {return r;}public void setR(double r) {this.r = r;}@Overridepublic String toString() {return "圆形:"+"边长:"+getR()+"\t\t\t\t面积:"+getArea()+"\t\t\t周长:"+getPerimeter()+"\t\t颜色"+getColor()+"\t\t填充"+isFilled();}}

 

package 几何图形;
import java.util.*;
public class Test1 {public static void m() throws CloneNotSupportedException {Octagon octagon = new Octagon(5);Octagon clone = (Octagon) octagon.clone();int i = octagon.compareTo(clone);System.out.println("克隆用Compareto对比的结果是" + i);}public static void main(String[] args) throws CloneNotSupportedException {m();GeometricObject[] geometricObjects = new GeometricObject[]{new Triangle(3, 4, 5, "yellow", false),new Square(8, "green", true),new Octagon(5, "red", false),new Circle(6, "blue", false)};for (GeometricObject obj : geometricObjects) {System.out.println(obj.toString());}System.out.println("\n按面积排序后\n");Arrays.sort(geometricObjects);for (GeometricObject obj : geometricObjects) {System.out.println(obj.toString());}}
}/*本来想用集合的,发现compareTo用不了,注掉先放着。list.add(new Triangle(3,4,5,"yellow",true));list.add(new Square(8,"green",true));list.add(new Octagon(7,"red",true));list.add(new Circle(6,"blue",true));list.sort();System.out.println(list);*/

 

 

本文标签: 几何图形GeometricObject类