Java 为什么完整的Arraylist无法通过第二个for循环打印?
我的完整arrayList不是通过second for循环打印的(由注释突出显示的打印语句:second loop print语句),而是通过first for循环打印的 我要完成的。:打印arraylist中除字符以外的对象。[打印第一个对象,而不管字符或任何其他对象] 我面临的问题:Arraylist对象“2”未通过秒for循环在控制台上打印 代码:Java 为什么完整的Arraylist无法通过第二个for循环打印?,java,for-loop,if-statement,collections,Java,For Loop,If Statement,Collections,我的完整arrayList不是通过second for循环打印的(由注释突出显示的打印语句:second loop print语句),而是通过first for循环打印的 我要完成的。:打印arraylist中除字符以外的对象。[打印第一个对象,而不管字符或任何其他对象] 我面临的问题:Arraylist对象“2”未通过秒for循环在控制台上打印 代码: import java.util.ArrayList; public class Test1 { public static void m
import java.util.ArrayList;
public class Test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList al = new ArrayList<>();
al.add('a');
al.add('2');
for(int i=0;i<al.size();i++){
System.out.println("element enterd in for loop: "+al.get(i));
}
for(int i=0;i<al.size();i++){
System.out.println("element enterd in for loop: "+al.get(i)); //second loop print statement
if(al.get(i).toString().charAt(0)>=65 & al.get(i).toString().charAt(0)<=122){
al.remove(i);
continue;
}
}
}
}
import java.util.ArrayList;
公共类Test1{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
ArrayList al=新的ArrayList();
al.添加(“a”);
al.添加('2');
对于(int i=0;i当您从ArrayList
中删除元素时,以下元素的索引将递减。因此,当前循环需要进行以下调整:
for(int i=0;i<al.size();i++) {
System.out.println("element enterd in for loop: "+al.get(i));
if(al.get(i).toString().charAt(0)>=65 & al.get(i).toString().charAt(0)<=122) {
al.remove(i);
i--; // make sure you are not skipping the element following the removed element
continue;
}
}
及
可以成为
al.get(i) > 65
当索引i=0时,您正在从列表中删除a
。然后列表的大小变为1,i
也变为1。因此循环条件i
为false
,因为i=1
和al.size()=1
。因此,您不必进入循环内部打印元素2
。要防止从列表中删除项目时出现这种情况,可以将i
的值减少1。您可以尝试使用流:
private static boolean isChar(Character x) {
return ('a' <= x && x <= 'z' ) || ('A' <= x && x <= 'Z');
}
public static void main(String[] args) {
List<Character> al = Arrays.asList('a','2','b','Z','M','4','9','g');
al.stream().filter(x -> !isChar(x)).forEach(System.out::println);
}
您还可以使用迭代器:
List<Character> al = new ArrayList<>();
al.add('a');
al.add('2');
final Iterator<Character> iterator = al.iterator();
while (iterator.hasNext()) {
final Character next = iterator.next();
System.out.println("element enterd in for loop: " + next);
if (next.toString().charAt(0) >= 65 & next.toString().charAt(0) <= 122) {
iterator.remove();
}
}
List al=new ArrayList();
al.添加(“a”);
al.添加('2');
final Iterator Iterator=al.Iterator();
while(iterator.hasNext()){
最后一个字符next=iterator.next();
System.out.println(“为循环输入的元素:“+next”);
如果(next.toString().charAt(0)>=65&next.toString().charAt(0)请使用以下代码
ArrayList al = new ArrayList<>();
al.add('s');
al.add('2');
al.add('5');
al.add('6');
al.add('e');
for (int i = 0; i < al.size(); i++) {
System.out.println("element enterd in for loop: " + al.get(i));
}
System.out.println("***************\n");
for (int i = 0; i < al.size(); i++) {
if (i == 0) {
System.out.println("element enterd in for loop: " + al.get(i));
} else {
if (!Character.isLetter(al.get(i).toString().charAt(0))) {
System.out.println("element enterd in for loop: " + al.get(i));
}
}
}
ArrayList al=new ArrayList();
等。添加(“s”);
al.添加('2');
al.添加('5');
al.添加('6');
al.添加('e');
对于(int i=0;i
它工作得很好,请提供文档链接或解释,因为我不明白从arraylist中删除元素后为什么要减少索引。@SainathPawar这在Javadoc中有明确说明-删除列表中指定位置的元素(可选操作)。将任何后续元素向左移动(从其索引中减去一个)。返回从列表中删除的元素。
您可以在一行中执行此操作:al.remove(i--);
@Sven这是真的
2
4
9
List<Character> al = new ArrayList<>();
al.add('a');
al.add('2');
final Iterator<Character> iterator = al.iterator();
while (iterator.hasNext()) {
final Character next = iterator.next();
System.out.println("element enterd in for loop: " + next);
if (next.toString().charAt(0) >= 65 & next.toString().charAt(0) <= 122) {
iterator.remove();
}
}
ArrayList al = new ArrayList<>();
al.add('s');
al.add('2');
al.add('5');
al.add('6');
al.add('e');
for (int i = 0; i < al.size(); i++) {
System.out.println("element enterd in for loop: " + al.get(i));
}
System.out.println("***************\n");
for (int i = 0; i < al.size(); i++) {
if (i == 0) {
System.out.println("element enterd in for loop: " + al.get(i));
} else {
if (!Character.isLetter(al.get(i).toString().charAt(0))) {
System.out.println("element enterd in for loop: " + al.get(i));
}
}
}