Обращаем ваше внимание, что: Я создал сообщение ранее, в котором был этот вопрос, а также несколько других, но мне сказали, что, поскольку я задавал столько вопросов в одном сообщении, было бы лучше сломать это зависит от индивидуальных вопросов. Поэтому, пожалуйста, не отмечайте это как дубликат, да, инструкции одинаковы и да, тот же код используется, но сам вопрос отличается. Благодарю.Реализация интерфейса для клонирования
Я работаю над программой со следующими инструкциями:
Написать класс под названием Octagon, который расширяет GeometricObject и реализует Сопоставимые и Cloneable интерфейсы. Предположим, что все 8 сторон восьмиугольника имеют одинаковый размер. Область может быть вычислена по следующей формуле
area = (2 + 4/square root of 2) * side * side
Написать программу (драйвер), чтобы прочитать в серии значений из файла, отобразить площадь и периметр, создать клон и сравнить объект и его клон (на основе площади). Кроме того, ваша программа должна сравнивать текущий объект (только что прочитанный) с первым объектом, в котором он находится. Программа заканчивается, когда отрицательный номер считывается из файла.
Вот код, который я до сих пор, это мой GeometricObject Класс:
public abstract class GeometricObject {
public abstract double getArea();
public abstract double getPerimeter();
}
Мой класс Octagon:
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);
}
}
И мой водитель или тестер класса: (Это где мне нужно the most help):
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 интерфейс, так что, когда я распечатать результаты, они будут говорить Clone Сравнение: Равно (или не равны) ,
Любой ввод очень ценится.
Почему вы сравниваете область? Просто сравните стороны. Area - это двойная вычисляемая с использованием sqrt (2), вы не можете просто сравнить ее с рассмотрением ошибки с плавающей запятой ... –
Потому что это то, что сказали названные направления. –
Вы действительно имеете в виду ['Cloneable'] (http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable.html)? Может быть, вам нужно «Сравнивать»? –