我在使用 removeDuplicate() 方法时遇到问题

i have trouble with removeDuplicate() method

我的代码看起来是正确的,但是当我 运行 它有一个错误(ArrayIndexOutOfBound)。

my Main method:

    public static void main(String[] args) {

    Diagram d1 = new Diagram();
    Layer l1 = new Layer();
    Shape s1 = new Triangle(3, 4, 5);
    Shape s2 = new Circle(10);
    Shape s3 = new Triangle(3, 4, 5);
    Shape s4 = new Rectangle(10, 5);
    l1.layers.add(s1);
    l1.layers.add(s2);
    l1.layers.add(s3);
    l1.layers.add(s4);
    d1.diagrams.add(l1);

//        l1.deleteTriangle();
//        System.out.println(l1.layers.get(0));

    l1.deleteDuplicate();
    System.out.println(l1.layers);

当我尝试评论六边形和形状部分时,我的代码构建成功但它删除了我的大部分形状

根据您对 "same shape" 的定义,解决此问题的更有条理的方法可能是覆盖每个 "shape" 子项中的 equals()(和 hashCode()) classes.

示例使用 Triangle class.

public class Triangle extends Shape {
    // The normal triangle stuff

    @Override
    public int hashCode() {
        int ret = getA();
        ret *= 31;
        ret += getB();
        ret *= 31;
        ret += getC();
        return ret;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Triangle other = (Triangle) obj;

        return getA() == other.getA() &&
               getB() == other.getB() &&
               getC() == other.getC();
    }
}

获取不重复的新列表(集合):

List<Shape> shapes = Arrays.asList(new Triangle(3, 4, 5), new Triangle(4, 4, 5), new Triangle(3, 4, 5));

Set<Shape> shapesWithoutDuplicates = new HashSet<>(shapes);

你应该只做这个如果它是自然对于具有相同尺寸的三角形是"equal"。如果只是 "naturally equal" 如果三角形也绘制在同一位置,那么这种删除 "duplicates" 的特殊尝试将是一个特殊的一次性案例。

使用你原来的方法,你得到了异常,因为你试图在你删除了一些东西之后进行评估。

参见 Delete data from ArrayList with a For-loop