努力去理解图组中的平等

时间:2017-10-07 08:29:31

标签: java

我有这个类,其中包含一个可以包含CircleTriangle的组。

public class FiguresGroup {
private static final int NUM_FIGURES = 10;
private Figure[] figuresList = new Figure[NUM_FIGURES];
private int numF = 0;

public void add(Figure f) { figuresList[numF++] = f; }

public String toString() {
    String s = "";
    for (int i = 0; i < numF; i++) {
        s += "\n" + figuresList[i];
    }
    return s;
}

private boolean found(Figure f) {
    for (int i = 0; i < numF; i++) {
        if (figuresList[i].equals(f)) return true;
    }
    return false;
}

private boolean included(FiguresGroup g) {
    for (int i = 0; i < g.numF; i++) {
        if (!found(g.figuresList[i])) return false;
    }
    return true;
}

private boolean equals(FiguresGroup g) {
    if (g.included(this) && this.included(g)) return true;
}

我不知道如何实施equals。我试过你在这里看到的东西,但它没有用。 要使2个组相等,则必须包含来自另一个的每个元素,反之亦然。如何使这项工作?

1 个答案:

答案 0 :(得分:0)

你错过了两个物品numF的状况, 并且equals实现有编译错误。

另请注意,found方法(取决于included)取决于Figure.equals的正确实施。 如果它被正确实现,则可以通过以下方式修复FiguresGroup.equals

  private boolean equals(FiguresGroup g) {
    return numF == g.numF && g.included(this) && this.included(g);
  }

此外,FiguresGroup.equals不会覆盖Object.equals,这会令人困惑。事实上,你可能已经对此感到困惑。当您在此课程外拨打figuresGroup.equals时,代码会编译, 即使这种方法是私人的, 因为实际上会调用Object.equals而不是这个私有方法。

您可以通过覆盖Object.equals

来解决此问题
  @Override
  public boolean equals(Object obj) {
    if (!(obj instanceof FiguresGroup)) {
      return false;
    }
    FiguresGroup other = (FiguresGroup) obj;
    return numF == other.numF && other.included(this) && this.included(other);
  }