我在使用 removeDuplicate() 方法时遇到问题
i have trouble with removeDuplicate() method
我的代码看起来是正确的,但是当我 运行 它有一个错误(ArrayIndexOutOfBound)。
my Main method:
public static void main(String[] args) {
Diagram d1 = new Diagram();
Layer l1 = new Layer();
Shape s1 = new Triangle(3, 4, 5);
Shape s2 = new Circle(10);
Shape s3 = new Triangle(3, 4, 5);
Shape s4 = new Rectangle(10, 5);
l1.layers.add(s1);
l1.layers.add(s2);
l1.layers.add(s3);
l1.layers.add(s4);
d1.diagrams.add(l1);
// l1.deleteTriangle();
// System.out.println(l1.layers.get(0));
l1.deleteDuplicate();
System.out.println(l1.layers);
当我尝试评论六边形和形状部分时,我的代码构建成功但它删除了我的大部分形状
根据您对 "same shape" 的定义,解决此问题的更有条理的方法可能是覆盖每个 "shape" 子项中的 equals()
(和 hashCode()
) classes.
示例使用 Triangle
class.
public class Triangle extends Shape {
// The normal triangle stuff
@Override
public int hashCode() {
int ret = getA();
ret *= 31;
ret += getB();
ret *= 31;
ret += getC();
return ret;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Triangle other = (Triangle) obj;
return getA() == other.getA() &&
getB() == other.getB() &&
getC() == other.getC();
}
}
获取不重复的新列表(集合):
List<Shape> shapes = Arrays.asList(new Triangle(3, 4, 5), new Triangle(4, 4, 5), new Triangle(3, 4, 5));
Set<Shape> shapesWithoutDuplicates = new HashSet<>(shapes);
你应该只做这个如果它是自然对于具有相同尺寸的三角形是"equal"。如果只是 "naturally equal" 如果三角形也绘制在同一位置,那么这种删除 "duplicates" 的特殊尝试将是一个特殊的一次性案例。
使用你原来的方法,你得到了异常,因为你试图在你删除了一些东西之后进行评估。
参见 Delete data from ArrayList with a For-loop。
我的代码看起来是正确的,但是当我 运行 它有一个错误(ArrayIndexOutOfBound)。
my Main method:
public static void main(String[] args) {
Diagram d1 = new Diagram();
Layer l1 = new Layer();
Shape s1 = new Triangle(3, 4, 5);
Shape s2 = new Circle(10);
Shape s3 = new Triangle(3, 4, 5);
Shape s4 = new Rectangle(10, 5);
l1.layers.add(s1);
l1.layers.add(s2);
l1.layers.add(s3);
l1.layers.add(s4);
d1.diagrams.add(l1);
// l1.deleteTriangle();
// System.out.println(l1.layers.get(0));
l1.deleteDuplicate();
System.out.println(l1.layers);
当我尝试评论六边形和形状部分时,我的代码构建成功但它删除了我的大部分形状
根据您对 "same shape" 的定义,解决此问题的更有条理的方法可能是覆盖每个 "shape" 子项中的 equals()
(和 hashCode()
) classes.
示例使用 Triangle
class.
public class Triangle extends Shape {
// The normal triangle stuff
@Override
public int hashCode() {
int ret = getA();
ret *= 31;
ret += getB();
ret *= 31;
ret += getC();
return ret;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Triangle other = (Triangle) obj;
return getA() == other.getA() &&
getB() == other.getB() &&
getC() == other.getC();
}
}
获取不重复的新列表(集合):
List<Shape> shapes = Arrays.asList(new Triangle(3, 4, 5), new Triangle(4, 4, 5), new Triangle(3, 4, 5));
Set<Shape> shapesWithoutDuplicates = new HashSet<>(shapes);
你应该只做这个如果它是自然对于具有相同尺寸的三角形是"equal"。如果只是 "naturally equal" 如果三角形也绘制在同一位置,那么这种删除 "duplicates" 的特殊尝试将是一个特殊的一次性案例。
使用你原来的方法,你得到了异常,因为你试图在你删除了一些东西之后进行评估。
参见 Delete data from ArrayList with a For-loop。