我的完整arrayList没有通过第二个for循环打印。(通过注释突出显示的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;
}
}
}
}
帮助:请帮我弄清楚问题所在。
答案 0 :(得分:2)
从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;
}
}
顺便说一句,将Character
转换为String
仅提取第一个char
似乎非常倒退。
简单地避免使用原始类型:
List<Character> al = new ArrayList<>();
和
al.get(i).toString().charAt(0) > 65
可以成为
al.get(i) > 65
答案 1 :(得分:0)
您在索引a
时从列表中删除i = 0
。然后列表的大小变为1,i
也变为1.因此,i < al.size()
和false
的循环条件i = 1
为al.size() =1
。所以你不要进入循环内部来打印元素2
。要在从列表中删除项目时阻止此操作,可以将i
的值减1.“
答案 2 :(得分:0)
您可以尝试使用流:
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);
}
输出:
2
4
9
答案 3 :(得分:0)
您也可以使用迭代器:
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();
}
}
答案 4 :(得分: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));
}
}
}