Java 编写一个名为removeZeros的方法
编写一个方法,消除所有出现的数字0。我写的方法是有效的,除非一行中有两个零,否则在方法输出7,2,0,4的情况下运行它之后,我做错了什么,例如0,7,2,0,0,4,0Java 编写一个名为removeZeros的方法,java,Java,编写一个方法,消除所有出现的数字0。我写的方法是有效的,除非一行中有两个零,否则在方法输出7,2,0,4的情况下运行它之后,我做错了什么,例如0,7,2,0,0,4,0 import java.util.*; public class RemoveZeros { public static void main(String[] args) { Integer[] nums = {0, 7, 2, 0, 0, 4, 0}; ArrayList<Intege
import java.util.*;
public class RemoveZeros {
public static void main(String[] args) {
Integer[] nums = {0, 7, 2, 0, 0, 4, 0};
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(nums));
removeZeros(list);
System.out.println(list);
}
public static void removeZeros(ArrayList<Integer> list) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i) == 0) {
list.remove(i);
}
}
}
}
import java.util.*;
公共类RemoveZero{
公共静态void main(字符串[]args){
整数[]nums={0,7,2,0,0,4,0};
ArrayList=newArrayList(Arrays.asList(nums));
删除零(列表);
系统输出打印项次(列表);
}
公共静态void removeZero(ArrayList列表){
对于(int i=0;i
试着把i--代码>后<代码>列表。删除(i)代码>
ArrayLists的remove方法
删除此列表中指定位置的元素。转移
左侧的任何后续元素(从其
指数)。
因此,当您在编写代码时从列表中删除一个元素时,您已经将所有元素向右移动,将删除的元素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);
}
}
您可以使用以下单个语句来完成此操作:
public static void removeZeros(ArrayList<Integer> list) {
list.removeAll(Collections.singleton(0));
}
import java.util.Collections;
这是因为当你删除零时,光标仍在移动。因此它将跳过零后面的元素。要处理此问题,请在删除零时将光标向后移动一步。加上我--;在list之后。remove(i)语句。您必须手动减少i
。请尝试代替for循环:int i=list.size()-1;当(i>=0){…i--;}
在纸上手工操作时:尝试1,0,0,2@Blobonat除了i--
是在循环体之后执行,而不是在循环体之前执行。@Blobonat为什么不像以前那样坚持for循环:for(int i=list.size()-1;i>=0;i--)
?
import java.util.Collections;