使用循环语句,要当心陷阱,不然挖了一大坑给您都不知道

使用循环语句,当心陷阱,如:下面例子:
     1、创建List数组,并向其添加数组.
     2、用for循环,移除List所有元素
     3、判断List是否为空,如果不为空,打印List所有元素

 剩下元素的个数为1. 具体元素有:World 
 
 ========================================
通过上面例子,使用循环移除List所有元素,其结果并不是按我们所想,把所有元素移除,而是保留了一位元素。
循环代码着实给我们挖了一大坑,好家伙!
下面我们用代码形式了解下,它是怎么给我们挖坑,坑是怎么形成。 如:
     2、用for循环,移除List2所有元素
        for循环值:i=0
        list2的元素总数为:3
        现在list2的所有元素及对应的下标 :
        list2[0] = Hello, 对应下标为0
        list2[1] = World, 对应下标为1
        list2[2] = Java, 对应下标为2
        通过i值,移除List2对应下标的元素值:list2[0] = Hello, 对应下标为0
        通过移除元素后,list2现在的元素及对应下标:
        list2[0] = World, 对应下标为0
        list2[1] = Java, 对应下标为1
----------------------------------------
        for循环值:i=1
        list2的元素总数为:2
        现在list2的所有元素及对应的下标 :
        list2[0] = World, 对应下标为0
        list2[1] = Java, 对应下标为1
        通过i值,移除List2对应下标的元素值:list2[1] = Java, 对应下标为1
        通过移除元素后,list2现在的元素及对应下标:
        list2[0] = World, 对应下标为0
----------------------------------------

 
 ========================================
通过例子,我们知道坑是怎么形成的原因:
    1、每当删除一个元素,所有检索值必然减1,即所有元素重新排列位置,导致list2[0]有元素。
    2、而此时循环语句i,按规继续增加1,list2[0]的值无法删除。
解决方法:在循环语句中,每次删除元素后,重新计算i的值,从而实现删除元素后,i值不变,从而实现循环删除所有元素。
     2、用for循环,移除List3所有元素
        for循环值:i=0
        list3的元素总数为:3
        现在list3的所有元素及对应的下标 :
        list3[0] = Hello, 对应下标为0
        list3[1] = World, 对应下标为1
        list3[2] = Java, 对应下标为2
        通过i值,移除List3对应下标的元素值:list3[0] = Hello, 对应下标为0
        通过移除元素后,list3现在的元素及对应下标:
        list3[0] = World, 对应下标为0
        list3[1] = Java, 对应下标为1
让i值始终为0,i-1=-1因‘i++’这个条件使i=0
----------------------------------------
        for循环值:i=0
        list3的元素总数为:2
        现在list3的所有元素及对应的下标 :
        list3[0] = World, 对应下标为0
        list3[1] = Java, 对应下标为1
        通过i值,移除List3对应下标的元素值:list3[0] = World, 对应下标为0
        通过移除元素后,list3现在的元素及对应下标:
        list3[0] = Java, 对应下标为0
让i值始终为0,i-1=-1因‘i++’这个条件使i=0
----------------------------------------
        for循环值:i=0
        list3的元素总数为:1
        现在list3的所有元素及对应的下标 :
        list3[0] = Java, 对应下标为0
        通过i值,移除List3对应下标的元素值:list3[0] = Java, 对应下标为0
        通过移除元素后,list3现在的元素及对应下标:
让i值始终为0,i-1=-1因‘i++’这个条件使i=0
----------------------------------------
 

import java.util.ArrayList;
import java.util.List;

public class Array_List {
    public static void main(String[] args) {

        System.out.println("使用循环语句,当心陷阱,如:下面例子:");
        System.out.println("\t 1、创建List数组,并向其添加数组.");

        List<String> list = new ArrayList<>();
        list.add("Hello");
        list.add("World");
        list.add("Java");



        System.out.println("\t 2、用for循环,移除List所有元素");
        for(int i = 0;i<list.size();i++){
            list.remove(i);
        }

        System.out.println("\t 3、判断List是否为空,如果不为空,打印List所有元素");
        if(list.size()>0){
            System.out.print("\n 剩下元素的个数为" + list.size() + ". 具体元素有:");
            for(int i = 0;i<list.size();i++){
                System.out.print(list.get(i) + " ");
            }
        }else {
            System.out.println("\n 元素已删除");
        }

        System.out.println("\n \n ========================================");
        System.out.println("通过上面例子,使用循环移除List所有元素,其结果并不是按我们所想,把所有元素移除,而是保留了一位元素。\n" +
                "循环代码着实给我们挖了一大坑,好家伙!\n" +
                "下面我们用代码形式了解下,它是怎么给我们挖坑,坑是怎么形成。 如:");
        List<String> list2 =new ArrayList<>();
        list2.add("Hello");
        list2.add("World");
        list2.add("Java");

        System.out.println("\t 2、用for循环,移除List2所有元素");
        for(int i = 0;i<list2.size();i++){

            System.out.println("\t\tfor循环值:i=" + i);
            System.out.println("\t\tlist2的元素总数为:"+list2.size());
            System.out.println("\t\t现在list2的所有元素及对应的下标 :");
            for (int j = 0; j < list2.size(); j++) {
                System.out.println("\t\tlist2[" + j + "] = " + list2.get(j)+ ", 对应下标为" + j);
            }
            String re_str = list2.remove(i);
            System.out.println("\t\t通过i值,移除List2对应下标的元素值:list2["+i+"] = " + re_str +", 对应下标为" +i);
            System.out.println("\t\t通过移除元素后,list2现在的元素及对应下标:");
            for (int j = 0; j < list2.size(); j++) {
                System.out.println("\t\tlist2[" + j + "] = " + list2.get(j)+ ", 对应下标为" + j);
            }
            System.out.println("----------------------------------------");
        }

        System.out.println("\n \n ========================================");
        System.out.println("通过例子,我们知道坑是怎么形成的原因:\n\t1、每当删除一个元素,所有检索值必然减1,即所有元素重新排列位置,导致list2[0]有元素。" +
                "\n\t2、而此时循环语句i,按规继续增加1,list2[0]的值无法删除。");
        System.out.println("解决方法:在循环语句中,每次删除元素后,重新计算i的值,从而实现删除元素后,i值不变,从而实现循环删除所有元素。");
        List<String> list3 =new ArrayList<>();
        list3.add("Hello");
        list3.add("World");
        list3.add("Java");

        System.out.println("\t 2、用for循环,移除List3所有元素");
        for(int i = 0;i<list3.size();i++){

            System.out.println("\t\tfor循环值:i=" + i);
            System.out.println("\t\tlist3的元素总数为:"+list3.size());
            System.out.println("\t\t现在list3的所有元素及对应的下标 :");
            for (int j = 0; j < list3.size(); j++) {
                System.out.println("\t\tlist3[" + j + "] = " + list3.get(j)+ ", 对应下标为" + j);
            }
            String re_str = list3.remove(i);
            System.out.println("\t\t通过i值,移除List3对应下标的元素值:list3["+i+"] = " + re_str +", 对应下标为" +i);
            System.out.println("\t\t通过移除元素后,list3现在的元素及对应下标:");
            for (int j = 0; j < list3.size(); j++) {
                System.out.println("\t\tlist3[" + j + "] = " + list3.get(j) + ", 对应下标为" + j);
            }
            System.out.println("让i值始终为0,i-1=" + (i -= 1)+"因‘i++’这个条件使i=0");
            System.out.println("----------------------------------------");
        };

    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值