从数组中删除一些东西

丹尼尔·齐佩尔

这是我的代码的一部分,我有一个数组(形状)并且需要能够从这个数组中删除和添加一个形状。在 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章