我有这个类,它包含在一个可以包含Circle
和Triangle
的组中。
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
。我尝试了你在这里看到的内容,但它不起作用。
为了使两个组相等,一个组必须包含另一个组中的所有元素,反之亦然。如何做到这一点?
最佳答案
您错过了两个对象的 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
时,代码会编译,
即使这个方法是私有(private)的,
因为实际上将调用 Object.equals
而不是这个私有(private)方法。
您可以通过覆盖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);
}
关于java - 努力理解图形组中的等于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46618223/