从数组中删除内容

时间:2017-11-08 02:29:22

标签: java arrays

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

1 个答案:

答案 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.");
}