这是我的代码的一部分,我有一个数组(形状),需要能够从这个数组中删除和添加一个形状。在if语句中,如果我取出“&& shapes [i] .equals(aShape)”部分,它将从数组中删除形状,但即使用户输入的形状不在数组中。如果它们输入实际存在的形状,我怎样才能删除数组中的形状?
如果我添加一个圆圈,并选择删除所述圆圈,它只会告诉我“找不到那个形状。”
//Remove Shape
public void removeShape(Shape aShape)
{
for(int i=0;i<shapes.length;i++)
{
if(shapes[i] != null && shapes[i].equals(aShape))
{
shapes[i] = null;
return;
}
}
System.out.println("Cannot find that shape.");
}
答案 0 :(得分:0)
java.lang.Object提供的 equals()类的默认实现比较内存位置,只有两个引用变量指向同一内存位置时才返回true
即。基本上他们是同一个对象。
因此,在您的情况下,由于Shape是一个界面,您必须在Shape接口中添加自己的 equals 方法,在我的示例中是 compare 。
public interface Shape {
//Your variable and methods are skipped
public boolean compare();
}
public class Circle extends Shape {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean compare(String name) {
if (this.name.equals(name)) {
return true;
}
return false;
}
}
如果你不想在每个类中实现compare,你可以在一个接口中使用静态方法,(默认方法也可以,但我不熟悉
public interface Shape {
//Your variable and methods are skipped
public static boolean compare(String name1, String name2){
if (name1.equals(name2)) {
return true;
}
return false;
}
}
如果您将以这种方式使用它:
//Remove Shape
public void removeShape(Shape aShape)
{
for(int i=0;i<shapes.length;i++)
{
if(shapes[i] != null && Shape.compare(shapes[1].name, aShape.name))
{
shapes[i] = null;
return;
}
}
System.out.println("Cannot find that shape.");
}