Java 努力理解图形组中的等号

Java 努力理解图形组中的等号,java,Java,我有一个类,它由一个组组成,可以包含圆和三角形 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 toStri

我有一个类,它由一个组组成,可以包含
三角形

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;
}
公共类图形组{
私有静态最终整数=10;
私人数字[]数字列表=新数字[数字];
私有int numF=0;
public void add(图f){figuresList[numF++]=f;}
公共字符串toString(){
字符串s=“”;
for(int i=0;i
我不知道如何实现
equals
。我尝试了您在这里看到的内容,但没有效果。
要使两个组相等,一个组必须包含另一个组中的每个元素,反之亦然。如何进行此操作?

您错过了两个对象的
numF
的一个条件, 而
equals
实现有一个编译错误

还要注意,找到的
方法(取决于
包含的
)取决于
图.equals的正确实现。
如果正确实现,则可以通过以下方式修复
FiguresGroup.equals

  private boolean equals(FiguresGroup g) {
    return numF == g.numF && g.included(this) && this.included(g);
  }
另外,
FiguresGroup.equals
不会重写对象.equals
,这很容易混淆。事实上,您可能已经被这一点弄糊涂了。当您在此类之外调用
FiguresGroup.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);
  }

您错过了两个对象的
numF
上的条件, 而
equals
实现有一个编译错误

还要注意,找到的
方法(取决于
包含的
)取决于
图.equals的正确实现。
如果正确实现,则可以通过以下方式修复
FiguresGroup.equals

  private boolean equals(FiguresGroup g) {
    return numF == g.numF && g.included(this) && this.included(g);
  }
另外,
FiguresGroup.equals
不会重写对象.equals
,这很容易混淆。事实上,您可能已经被这一点弄糊涂了。当您在此类之外调用
FiguresGroup.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);
  }

FigureGroup
更具可读性是适当的
hashCode
equals
为涉及的类提供了实现。
FigureGroup
更具可读性是适当的
hashCode
equals
为涉及的类提供了实现。我尝试了这一点,但我创建了2个图UreGroup在堆上(堆中没有任何内容)并尝试使用equals,但它返回false,知道为什么吗?公共布尔等于(对象o){if(!(o instanceof Figure)){return false;}图f=(图)o;return x==f.x&&y==f.y;}@文森特先生很好,所以
Figure.equals
看起来是正确的。这在你的帖子中是看不到的,这是我回答工作的一个要求。我最后一点为你修正了
FiguresGroup.equals
。啊,我明白了。我真的不知道……而且我不认为我被教导过什么是压倒一切。无论如何,谢谢你花时间回答我:)@MrVincent好的,那么你确认它与我给你的更新方法一起工作吗?我尝试了这个,但我在堆上创建了两个FigureGroup(其中没有任何内容)并尝试了equals,但它返回false,知道为什么吗?公共布尔等于(对象o){if(!(o instanceof Figure)){return false;}Figure f=(Figure)o;返回x==f.x&&y==f.y;}@文森特先生很好,所以
Figure.equals
看起来是正确的。这在你的帖子中是看不到的,这是我回答工作的一个要求。我最后一点为你修正了
FiguresGroup.equals
。啊,我明白了。我真的不知道……而且我不认为我被教导过什么是压倒一切。无论如何,谢谢你花时间回答我:)@MrVincent先生好的,那么你确认它与我给你的更新方法有效吗?