• 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里用得是多么的不好。

     

    找一个博客做自己的女朋友,不管你跟她说什么她都帮你记录,这是多么幸福的一件事啊。如果有女生能做到这点,赶尽娶回家吧!
  • 相关阅读:
    threed+handler解析gson文件,并且上拉加载,下拉刷新
    异步交互解析xml文件
    开启事务
    Android判断网路是否畅通加权限
    按两次返回键,退出程序,或者按home键退出程序
    SQL数据库的增删改查
    adb常用的命令
    avd和ddms和项目打包
    activity和fragment之间的交互
    activity的开启和关闭数据返回
  • 原文地址:https://www.cnblogs.com/hexiaochun/p/3015456.html
Copyright © 2020-2023  润新知