• java与as3.0中for each使用的小陷阱


    在程序开发中for可以说是一个非常非常常出现的东西,特别是在数组里面处理的时候,来看一下for的简单用法

    for与for each

    我们在使用for时来一个非常常见的代码段

    //as3.0
    for(var i:uint=0;i<n;i++)
    {
         trace("i:"i);
         
    }
    
    //java
    
    for(int i=0;i<n;i++)
    {
       System.out.println("i:"i);
    }
    

    在写这里时我们都会说这个用起来很简单嘛,也没什么问题嘛,还讲个屁啊

    下面我们来看一个很容易引发的一个错误 

    来看一段代码

    ArrayList<int> arr=new ArrayList<int> ();
    
    arr.add(1);
    arr.add(2);
    arr.add(3);
    arr.add(4);
    arr.add(5);
    arr.add(6);
    arr.add(7);
    
    for(int i=0;i<arr.lenght;i++)
    {
            System.out.println(arr[i]);
            if(i==4)
                  arr.remove(i);
    }        
    

      大家看一下这个我们能打印出数组的全部数据吗?

          可以吃过亏的就知道这里我们一不小心就改了数组的长度,会导致我们遍历的时候跳过了某个元素。

          大家仔细看一下这个遍历过程就能发现问题

          这个问题的解决办法也很好解决只要把遍历反过来写就能避免有某些元素遍历不到的情况 

    ArrayList<int> arr=new ArrayList<int> ();
    
    arr.add(1);
    arr.add(2);
    arr.add(3);
    arr.add(4);
    arr.add(5);
    arr.add(6);
    arr.add(7);
    
    for(int i=arr.lenght-1;i>=0;i--)
    {
            System.out.println(arr[i]);
            if(i==4)
                  arr.remove(i);
    }  
    

     

    可能还有同学会想到用增强的 for循环,这个可以保证遍历所有的元素,而且经过我的测试 这个增强的 for循环不让我们在循环里动态改变这个数组的大小,所以也可以解决这个问题

    如果 我们强硬去改变它就会报一个java.util.ConcurrentModificationException的异常错误出来

    最近在as3.0遇到了一个更神奇的问题,就是这个东西这个增强for循环支持动态的改变正在遍历的数组长度,出现的问题就是上面的

    下面我们来过一下这个错误

    代码:

                          //as3.0
                        var arr:Array = [1,2,3,4,5] ;
    			for each (var i:int in arr) 
    			{
    				trace(i);
    				if(i==3)
    					arr.splice(arr.indexOf(1),1);
    			}
    			                    
    

      运行结果可想而知:

    1
    2
    3
    5
    

      这个跳了一下。没有遍历到全部元素,所以这个要小心了。也可见这个增强for在as3.0里用得是多么的不好。

     

    找一个博客做自己的女朋友,不管你跟她说什么她都帮你记录,这是多么幸福的一件事啊。如果有女生能做到这点,赶尽娶回家吧!
  • 相关阅读:
    Linux的僵尸进程及其解决方法
    描述linux系统从开机到登陆界面的启动过程
    __weak、__strong这样的关键词和weak、strong有哪些区别
    选择器(UIPickerView)
    UITableView 滚动流程性优化
    几种设置UITableView的cell动态高度的方法
    强大的Core Image(教你做自己的美图秀秀))
    iOS UIBezierPath类 介绍
    Quartz 2D编程指南- PDF文档的创建、显示及转换
    Quartz 2D编程指南(4) - 颜色和颜色空间
  • 原文地址:https://www.cnblogs.com/hexiaochun/p/3015456.html
Copyright © 2020-2023  润新知