【发布时间】:2017-01-31 16:14:43
【问题描述】:
此方法的职责是从arrayList 中删除所有出现的值toRemove。剩余的元素应该只是向列表的开头移动(大小不会改变)。末尾的所有“额外”元素(尽管列表中出现了很多 toRemove)都应该用 0 填充。该方法没有返回值,如果列表没有元素,它应该没有效果。不能使用 ArrayList 类中的 remove() 和 removeAll()。
方法签名是:
public static void removeAll(ArrayList<Integer> list, int toRemove);
解决办法:
public static void removeAll(ArrayList<Integer> list, int toRemove) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i) = toRemove) {
for (int j = i + 1; j < list.size(); j++) {
list.set(j - 1, list.get(j));
}
list.set(list.size() - 1, 0);
i--;
}
}
我很理解第一个for 循环和if 语句。因为人们想逐一遍历整个arrayList,并且对于arrayList中存在数字的每个索引检查它是否是,实际上是toRemovee整数。在这之后我迷路了。
为什么还有一个for 循环?为什么我们在最后一个之后开始第二个for-loop?
为什么在第二个for 循环中我们使用list.set(),我知道set 方法接受两个参数,索引位置和子元素到该指定位置。为什么j-1?为什么在第二个循环结束后会有一行:list.set(list.size()-1, 0)?为什么是i--?
有很多活动部件,我想了解其中的逻辑。
谢谢
【问题讨论】:
-
if (list.get(i) = toRemove)你的意思是写==? -
其实不需要第二个循环。这是一个非常幼稚的实现。