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先生好的,那么你确认它与我给你的更新方法有效吗?