题目描述:
编写一个名为Octagon的类,表示八边形。假设八边形八条边的边长都相等。它的面积可以使用下面的公式计算:
面积 = (2 + 4 / sqrt(2)) * 边长 * 边长
请实现Octagon类,其实现了Comparable
<Octagon>
和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程序末尾。
程序框架:
程序按以下框架进行设计后提交:
class Octagon implements Comparable<Octagon>,Cloneable{
……
@Override
public int compareTo(Octagon o){
……
}
@Override
protected Object clone() {
return this;
}
}
裁判测试程序样例:
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.Scanner;
public class Main {
public static void main(String[] args) {
@SuppressWarnings("resource")
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));
}
}
/* 请在这里填写答案 */
@SuppressWarnings("hiding")
//程序按以下框架进行设计后提交:
interface Comparable<Octagon>
{
int compareTo(Octagon o);
}
interface Cloneable
{
Object clone();
}
class Octagon implements Comparable<Octagon>,Cloneable{
// ……
private double side;
public Octagon(double side)
{
this.setSide(side);
}
public void setSide(double side)
{
this.side=side;
}
public double getSide()
{
return this.side;
}
public double getPerimeter()
{
return this.getSide()*8;
}
public double getArea()
{
return (2 + 4 / Math.sqrt(2)) * this.getSide() * this.getSide();
}
@Override
public int compareTo(Octagon o){
// ……
if(this.getSide()>o.getSide())
return 1;
else if(this.getSide()<o.getSide())
return -1;
else if(this.getSide()==o.getSide())
return 0;
return 0;
}
@Override
public Object clone() {
return new Octagon(side);
}
}