请注意: 我之前创建了一个有这个问题和其他几个问题的帖子,但被告知,因为我在同一篇文章中提出了这么多问题,所以最好把它分解成个别问题。所以请不要将其标记为重复,是的说明是相同的,是的,使用相同的代码,但问题本身是不同的。感谢。
我正在制作一个程序,其中包含以下说明:
编写一个名为Octagon的类,它扩展了GeometricObject并实现了Comparable和Cloneable接口。假设八边形的所有8个边都具有相同的大小。可以使用以下公式计算面积
area = (2 + 4/square root of 2) * side * side
编写程序(驱动程序)以从文件中读取一系列值,显示区域和周边,创建克隆并比较对象及其克隆(基于区域)。此外,您的程序应该将当前对象(刚刚读入)与读入的第一个对象进行比较。当从文件中读取负数时,程序结束。
这是我到目前为止的代码,这是我的GeometricObject类:
public abstract class GeometricObject {
public abstract double getArea();
public abstract double getPerimeter();
}
我的八角形课程:
public class Octagon extends GeometricObject implements Comparable<Octagon>, Cloneable {
private double side;
public Octagon() {
}
public Octagon(double side) {
this.side = side;
}
public double getSide() {
return side;
}
public void setSide(double side) {
this.side = side;
}
public double getArea() {
return (2 + (4 / (Math.sqrt(2))) * side * side);
}
public double getPerimeter() {
return side * 8;
}
public String toString() {
return "Area: " + getArea() + "\nPerimeter: "
+ getPerimeter() + "\nClone Compare: " + "\nFirst Compare: ";
}
public int compareTo(Octagon octagon) {
if(getArea() > octagon.getArea())
return 1;
else if(getArea() < octagon.getArea())
return -1;
else
return 0;
}
@Override
public Octagon clone() {
return new Octagon(this.side);
}
}
我的司机或测试员班:(这是我需要最多帮助的地方):
import java.util.*;
public class Driver {
public static void main(String[] args) throws Exception {
java.io.File file = new java.io.File("prog7.dat");
Scanner fin = new Scanner(file);
Octagon first = null;
int i = 1;
Octagon older;
while(fin.hasNext())
{
double side = fin.nextDouble();
if(side < 0.0)
break;
Octagon oct = new Octagon(side);
System.out.print("Octagon " + i + ": \"" + oct.toString() + "\"");
if (first == null) {
first = oct;
System.out.print("Equal");
}
else {
int comparison = oct.compareTo(first);
if (comparison < 0)
System.out.print("less than first");
else if (comparison > 0)
System.out.print("greater than first");
else
System.out.print("equal");
}
String cloneComparison = "Clone Compare: ";
older = oct;
Octagon clone = oct.clone();
if ( older.getArea() == clone.getArea() ){
cloneComparison = cloneComparison + "Equal";
} else {
cloneComparison = cloneComparison + "Not Equal";
}
//System.out.println(cloneComparison);
i++;
first = new Octagon(side);
System.out.println();
}
fin.close();
}
}
这是用于获取输入的文件。每一行是一个八边形:
5.0
7.5
3.26
0.0
-1.0
我很难弄清楚如何实现Cloneable Interface,这样当我打印出结果时,他们会说Clone Comparison:Equal(或不等于)。
非常感谢任何输入。
答案 0 :(得分:1)
我要做的是首先通过创建具有相同边长的八角形来实现方法Octagon.clone()
Public Octagon clone(){
return new Octagon(this.side);
}
在驱动程序中,让它克隆新创建的八角形,并将两者(旧版和新版)进行比较:
String cloneComparison = "Clone Comparision: ";
if ( older.getArea() == newer.getArea() ){
cloneComparison = cloneComparison + "Equal";
} else {
cloneComparison = cloneComparison + "Not Equal";
}
System.println(cloneComparison);
根据结果,返回正确的字符串。