Java 为什么完整的Arraylist无法通过第二个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

我的完整arrayList不是通过second for循环打印的(由注释突出显示的打印语句:second loop print语句),而是通过first for循环打印的

我要完成的。:打印arraylist中除字符以外的对象。[打印第一个对象,而不管字符或任何其他对象]

我面临的问题:Arraylist对象“2”未通过秒for循环在控制台上打印

代码

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));
            }
        }
    }