写一个名为removeZeros的方法

时间:2016-07-14 14:49:23

标签: java

编写一个方法,消除所有出现的数字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

4 个答案:

答案 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)声明之后。