这是我的代码的一部分,我有一个数组(形状)并且需要能够从这个数组中删除和添加一个形状。在 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.");
}
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;
}
}
如果你不想在每个类中都实现比较,你可以在接口中使用静态方法,(默认方法也可以,但我不熟悉
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.");
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句