八边形Octagan类(接口)
题目描述
编写一个名为Octagon的类,表示八边形。假设八边形八条边的边长都相等。它的面积可以使用下面的公式计算:
面积 = (2 + 4 / sqrt(2)) * 边长 * 边长
请实现Octagon类,其实现了Comparable和Cloneable接口。
1 有一个私有变量double side ,表示八边形的边长。
2 构造函数Octagon(double side),初始化side。
3 为side添加getter和setter方法。
4 double getPerimeter()方法,计算周长。
5 double getArea()方法,计算面积。
6 实现Comparable接口的方法 public int compareTo(Octagon o);
如果当前对象的边长比参数o的边长大,返回1,小则返回-1,相等返回0。
7 实现Cloneable接口的方法 protected Object clone()
编写一个测试程序,根据用户输入的浮点数作为边长,创建一个Octagon对象,然后显示它的面积和周长。使用clone方法创建一个新对象,并使用CompareTo方法比较这两个对象。
使用Java完成该题的同学注意,此题提交时将会附加下述代码到被提交的Java程序末尾。
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Octagon a1 = new Octagon(input.nextDouble());
System.out.printf("Area is %.2f\n", a1.getArea());
System.out.println("Perimeter is " + a1.getPerimeter());
Octagon a2 = (Octagon) a1.clone();
System.out.println("Compare the methods " + a1.compareTo(a2));
}
}
**样例输入 **
5
**样例输出 **
Area is 120.71
Perimeter is 40.0
Compare the methods 0
代码:
import java.util.*;
interface Comparable{
int compareTo(Octagon o);
}
class Octagon implements Comparable{
double side;
public int compareTo(Octagon o) {
if(getArea()>((Octagon)o).getArea())
return 1;
else if (getArea()<((Octagon)o).getArea())
return -1;
else
return 0;
}
public Octagon(double side){
this.side=side;
}
public double getPerimeter() {
return 8*side;
}
public double getArea() {
return ((2+4/Math.sqrt(2))*side*side);
}
protected Object clone() {
return new Octagon(side);
}
}
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Octagon a1 = new Octagon(input.nextDouble());
System.out.printf("Area is %.2f\n", a1.getArea());
System.out.println("Perimeter is " + a1.getPerimeter());
Octagon a2 = (Octagon) a1.clone();
System.out.println("Compare the methods " + a1.compareTo(a2));
}
}