编写一个方法,消除所有出现的数字0.我写的方法有效,除非连续有两个零,我做错了什么,例如0,7,2,0,0,4,0之后通过方法输出7,2,0,4?
运行它def find_closest_condos(num, unit)
result = Condo.order('ST_Distance(condos.lonlat, ST_PointFromText("#{unit.lonlat.as_text)}")')
.limit(5)
end
答案 0 :(得分:3)
尝试在i--;
list.remove(i);
...
list.remove(i);
i--;
...
答案 1 :(得分:1)
您可以使用以下单个语句执行此操作:
public static void removeZeros(ArrayList<Integer> list) {
list.removeAll(Collections.singleton(0));
}
使用Collection
,导入以下内容:
import java.util.Collections;
答案 2 :(得分:0)
ArrayLists的remove方法
删除此列表中指定位置的元素。转移 左边的任何后续元素(从它们中减去一个) 指数)。 (Javadocs)
因此,当您在编写代码时从代码列表中删除元素时,您已将所有元素移动到左侧删除元素 i 的右侧; i + 1 转移到位置 i ,但你仍然在循环结束时递增 i ,因此它有效地跳过下一个值在列表中,您注意到以下0。
你有选择。您可以保持循环继续并将if语句更改为:
if (list.get(i) == 0) {
list.remove(i);
i--;
}
将 i 设置为 i-1 ,这样当您再次循环时, i 将恢复其原始值并占用刚发生的转变,或者
您可以从列表的结尾处开始,然后按相反的顺序进行操作,在这种情况下,移位无关紧要,因为您已经传递了这些元素:
for (int i = list.size()-1; i >= 0; i--) {
if (list.get(i) == 0) {
list.remove(i);
}
}
答案 3 :(得分:0)
那是因为当你删除一个零时,光标仍在移动。所以它会在Zero之后跳过元素。要处理此操作,请在移除零时将光标向后移动一步。加我 - ;在list.remove(i)声明之后。