繁体   English   中英

实施可克隆接口

[英]Implementing the Cloneable Interface

请注意:我之前创建了一个帖子,与其他几个问题同时出现,但是有人告诉我,由于我在同一帖子中问了很多问题,最好将其分解为单个问题。 因此,请不要将其标记为重复,是的,指令是相同的,并且是使用相同的代码,但是问题本身是不同的。 谢谢。

我正在按照以下说明编写程序:

编写一个名为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

我很难弄清楚如何实现可克隆接口,以便在打印结果时,他们会说“克隆比较:相等(或不相等)”。

任何输入,不胜感激。

我要做的是首先通过创建具有相同边长的Octagon来实现方法Octagon.clone()

Public Octagon clone(){
    return new Octagon(this.side);
}

Driver中,克隆您新创建的Octagon,然后将两个(旧的和较新的) 八字形进行比较:

String cloneComparison = "Clone Comparision: ";
if ( older.getArea() == newer.getArea() ){
    cloneComparison = cloneComparison + "Equal";
} else {
    cloneComparison = cloneComparison + "Not Equal";
}
System.println(cloneComparison);

还会根据结果返回正确的字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM