【发布时间】:2017-09-05 05:15:18
【问题描述】:
我正在尝试删除所有周长为 12 的三角形元素,我设置了一个 if 语句以使用 for 循环从数组列表中检查三角形对象的所有周长。
我的问题是,当我运行 for 循环时,它会删除所有周长等于 12 的三角形,但最后一个三角形仍会显示在输出中。
代码:
double smallestTriangle = 0.0;
double biggestCircle = 0.0;
/*for loops to get the smallest triangle(12) and largest circle(63.xx)*/
for(int i = 0; i < ShapeList.size(); i++) {
if (ShapeList.get(i).getClass().getName() == "Triangle") {
System.out.println(ShapeList.get(i));
System.out.println(ShapeList.get(i).getPerimeter() + " - " + smallestTriangle);
if (ShapeList.get(i).getPerimeter() == smallestTriangle) {
ShapeList.remove(i);
System.out.println("REMOVED!");
}
}
if (ShapeList.get(i).getClass().getName() == "Circle") {
if (ShapeList.get(i).getPerimeter() == biggestCircle) {
ShapeList.remove(i);
}
}
}
输出:
Triangle {a=3.0 b=4.0 c=5.0} perimeter = 12.0
12.0 - 12.0
REMOVED!
Triangle {a=3.0 b=4.0 c=5.0} perimeter = 12.0
12.0 - 12.0
REMOVED!
Triangle {a=4.9 b=5.0 c=8.9} perimeter = 18.8
18.8 - 12.0
Triangle {a=3.1 b=4.1 c=5.1} perimeter = 12.299999999999999
12.299999999999999 - 12.0
Triangle {a=4.0 b=5.0 c=6.0} perimeter = 15.0
15.0 - 12.0
Triangle {a=3.1 b=4.0 c=5.0} perimeter = 12.1
12.1 - 12.0
Triangle {a=3.9 b=4.8 c=5.7} perimeter = 14.399999999999999
14.399999999999999 - 12.0
Circle {r=1.0} perimeter = 6.283185307179586
Circle {r=2.111} perimeter = 13.263804183456108
Circle {r=1.1} perimeter = 6.911503837897546
Triangle {a=3.9 b=4.0 c=5.9} perimeter = 13.8
Square {l=3.0} perimeter = 12.0
Rectangle {l=3.0 w=5.1} perimeter = 16.2
Square {l=5.0} perimeter = 20.0
Triangle {a=4.9 b=5.0 c=8.9} perimeter = 18.8
Rectangle {l=8.0 w=2.1} perimeter = 20.2
Circle {r=3.8} perimeter = 23.876104167282428
Triangle {a=3.1 b=4.1 c=5.1} perimeter = 12.299999999999999
Triangle {a=4.0 b=5.0 c=6.0} perimeter = 15.0
Rectangle {l=3.1 w=5.2} perimeter = 16.6
Circle {r=10.0} perimeter = 62.83185307179586
Triangle {a=3.1 b=4.0 c=5.0} perimeter = 12.1
Circle {r=2.0} perimeter = 12.566370614359172
Circle {r=3.0} perimeter = 18.84955592153876
Rectangle {l=3.0 w=5.2} perimeter = 16.4
Square {l=100.1} perimeter = 400.4
Square {l=100.2} perimeter = 400.8
Triangle {a=3.0 b=4.0 c=5.0} perimeter = 12.0 // <- not getting removed
Triangle {a=3.9 b=4.8 c=5.7} perimeter = 14.399999999999999
数组列表:
Triangle {a=3.0 b=4.0 c=5.0} perimeter = 12.0
Circle {r=1.0} perimeter = 6.283185307179586
Circle {r=2.111} perimeter = 13.263804183456108
Circle {r=1.1} perimeter = 6.911503837897546
Triangle {a=3.0 b=4.0 c=5.0} perimeter = 12.0
Triangle {a=3.9 b=4.0 c=5.9} perimeter = 13.8
Square {l=3.0} perimeter = 12.0
Rectangle {l=3.0 w=5.1} perimeter = 16.2
Square {l=5.0} perimeter = 20.0
Triangle {a=4.9 b=5.0 c=8.9} perimeter = 18.8
Rectangle {l=8.0 w=2.1} perimeter = 20.2
Circle {r=3.8} perimeter = 23.876104167282428
Triangle {a=3.1 b=4.1 c=5.1} perimeter = 12.299999999999999
Triangle {a=4.0 b=5.0 c=6.0} perimeter = 15.0
Rectangle {l=3.1 w=5.2} perimeter = 16.6
Circle {r=10.0} perimeter = 62.83185307179586
Triangle {a=3.1 b=4.0 c=5.0} perimeter = 12.1
Circle {r=2.0} perimeter = 12.566370614359172
Circle {r=3.0} perimeter = 18.84955592153876
Rectangle {l=3.0 w=5.2} perimeter = 16.4
Square {l=100.1} perimeter = 400.4
Square {l=100.2} perimeter = 400.8
Circle {r=10.1} perimeter = 63.46017160251382
Triangle {a=3.0 b=4.0 c=5.0} perimeter = 12.0 //this element isn't getting removed
Triangle {a=3.9 b=4.8 c=5.7} perimeter = 14.399999999999999
【问题讨论】:
-
不确定这是否是问题的一部分。但是我会在循环
ShapeList时避免ShapeList.remove(i);。例如,请参阅here。 -
ShapeList.get(23)是第 24 个元素。 -
java.lang.IndexOutOfBoundsException: Index: 23, Size: 23- 索引从零开始。大小为 23 的数组没有索引 23,只有 0-22。 -
arraylist 有 25 项。我猜
remove()删除了两个元素,因此,当索引达到 23 时,抛出异常。 -
好吧,我改变了我的例子;即使我使用 i 循环代码,周长为 12 的三角形仍然存在。