嗨我写了这部分代码.在for循环之前我有这个arraylist:
[X :49.0 Y: 113.0 , angle :0.0, X :141.0 Y: 106.0 , angle :0.0, X :110.0 Y: 185.0 , angle: 1.0768211289482128, X :99.0 Y: 139.0 , angle: 1.9961041242180873, X :103.0 Y: 126.0 , angle : 2.4208694638343324]
这表明"x" and "y" and "angle"了一些观点.但在for循环中我想删除那些超过的元素
X :110.0 Y: 185.0 , angle: 1.0768211289482128
但它为我打印这个数组:
[X :49.0 Y: 113.0angle0.0, X :141.0 Y: 106.0 , angle:0.0, X :110.0 Y: 185.0 , angle: 1.0768211289482128, X :103.0 Y: 126.0 , angle: 2.4208694638343324]
哪个不对
int size = list .size();
for (int i=0;i<size;i++) {
if (list.get(i).getAngle() > pivot.getAngle() ) {
list.remove(i);
size--;
}
}
Run Code Online (Sandbox Code Playgroud)
请帮我谢谢
我建议你得到一个Iterator从list和使用iter.hasNext(),iter.next()并且iter.remove(),像这样:
Iterator<Point> iter = list.iterator();
while (iter.hasNext())
if (iter.next().getAngle() > pivot.getAngle())
iter.remove();
Run Code Online (Sandbox Code Playgroud)
另一种选择是将它们放入a中SortedMap,让角度代表键,并用于tailMap(pivot.getAngle())获得角度大于枢轴的那些点.
每当你删除一个元素时,它会将以下元素的索引向下移动1.最简单的解决方法是反过来:
for (int i = list.size() - 1; i >= 0; i--) {
if (list.get(i).getAngle() > pivot.getAngle() ) {
list.remove(i);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
298 次 |
| 最近记录: |