我有这个类,其中包含一个可以包含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
。我试过你在这里看到的东西,但它没有用。
要使2个组相等,则必须包含来自另一个的每个元素,反之亦然。如何使这项工作?
答案 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);
}