import java.util.*;
public class wren{ public static void main(String args[]){
  List<String> li = new ArrayList<String>();
    Random a = new Random();
    Iterator it = li.iterator();  String s = new String();
  int b = 0;
  for(int i = 0;i<5;i++){
  b= a.nextInt(10);
   li.add(Integer.toString(b));
  }
  Collections.sort(li);
  for(int i = 0; i<li.size();i++){
  System.out.println(li.get(i));
}
System.out.println("---------------------");
  Collections.reverse(li);
  for(int i = 0; i<li.size();i++)
  System.out.println(li.get(i));

   while(it.hasNext()){
   it.next();      //不加这句话就没有错误,为什么阿?
   System.out.println(b);
   b++;
   }
}
}
出错了。。
Exception in thread "main" java.util.ConcurrentModificationException
        at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:3
72)
        at java.util.AbstractList$Itr.next(AbstractList.java:343)
        at wren.main(wren.java:29)

解决方案 »

  1.   

          while(it.hasNext()){
              it.next();      //不加这句话就没有错误,为什么阿?
              System.out.println(b);
              b++;
          }
    while本来就是循环啊!
      

  2.   

    while(it.hasNext()){
      System.out.println(b);
      b++;
      }
    it.hasNext() ; 应该会执行 it.next()的,如果你在while中改变了它 ,while会判断 ,就好如for里面一样吧 
      

  3.   

    ConcurrentModificationException异常的本意是在用迭代器迭代集合的时候,如果发现有其他线程正在修改该集合,会迅速抛出此异常,该异常是快速失败的,就是告诉你不能在迭代的时候修改该集合。
      

  4.   

    Iterator it = li.iterator();
    移到while循环上面来
    你list都没准备好就放到迭代器中了Iterator it = li.iterator();
    while (it.hasNext()) {
    it.next(); // 不加这句话就没有错误,为什么阿?
    System.out.println(b);
    b++;
    }
      

  5.   

    问题找到了,你把Iterator it = li.iterator();这句放在   while(it.hasNext()){
              it.next();      //不加这句话就没有错误,为什么阿?
              System.out.println(b);
              b++;
          }的上边
      

  6.   

    得到Iterator后,List等就不能在进行add, remove等操作了,ConcurrentModificationException顾名思义就是修改不一致。
    http://blog.sina.com.cn/s/blog_670eabd10100n7qa.html