我試圖刪除所有與外圍12的三角形的元素,我設置了一個if語句來檢查三角形對象的所有外圍從數組列表中用for循環。元素不被IF語句識別
我的問題是當我運行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.remove(i);'在循環'ShapeList'時。例如,請參閱[這裏](http://stackoverflow.com/questions/10738634/delete-data-from-arraylist-with-a-for-loop)。 – jrook
'ShapeList.get(23)'是第24個元素。 – Holloway
'java.lang.IndexOutOfBoundsException:索引:23,大小:23' - 索引是從零開始的。大小爲23的數組沒有索引23,只有0-22。 – David