import java.util.*;//ArrayList类和Iterator接口都在此包中
public class testcollection
{
public static void main(String[] args)
{
int b=0;
ArrayList a1=new ArrayList();System.out.println("Please Enter Number:");
while(true)
{
try
{
b=System.in.read();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
if(b=='\r'|b=='\n')
break;
else
{
int num=b-'0';
a1.add(new Integer(num));
}
}
int sum=0;
[color=#FF0000]Iterator itr=a1.iterator();[/color]
while(itr.hasNext())
{
Integer intObj=(Integer)itr.next();
sum+=intObj.intValue();
}
System.out.println(sum);
}
}
上面这段程序是正确的
但是我把
[color=#FF0000]Iterator itr=a1.iterator();[/color]
这句话放到main方法开头去定义,就报错
就象下面
import java.util.*;//ArrayList类和Iterator接口都在此包中
public class testcollection
{
public static void main(String[] args)
{
int b=0;
ArrayList a1=new ArrayList();
[color=#FF0000]Iterator itr=a1.iterator();[/color]
System.out.println("Please Enter Number:");
while(true)
{
try
{
b=System.in.read();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
if(b=='\r'|b=='\n')
break;
else
{
int num=b-'0';
a1.add(new Integer(num));
}
}
int sum=0;while(itr.hasNext())
{
Integer intObj=(Integer)itr.next();
sum+=intObj.intValue();
}
System.out.println(sum);
}
}
错误
Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
    at java.util.AbstractList$Itr.next(AbstractList.java:420)
    at testcollection.main(testcollection.java:32)Process completed.
为啥阿
就是把[color=#FF0000]Iterator itr=a1.iterator();[/color]这个接口的定义放到开头了阿

解决方案 »

  1.   

    上面Iterator itr=a1.iterator();
    这句话Iterator itr=a1.iterator();本来我要标记成红色,但是系统生成出来变成了这样,在程序中是没有[color=#FF0000]标记的,就是Iterator itr=a1.iterator();的位置变动引起报错
      

  2.   

    Iterator是快速失败的 一旦你创建了迭代器 你就不能用原来的容器的方法改变容器的内容(add remove等方法),只能使用迭代器中的方法
    参见API文档
      

  3.   


    iterator()接口契约的功能是返回一个当前容器中内容的迭代者也就是在你从命令行中输入字符,以执行(a1.add(new Integer(num)); )之前
    a1中不存在任何内容当时他执行iterator()的结果也必然是个空迭代者
    int b=0; 
    ArrayList a1=new ArrayList(); 
    //这里的a1.iterator()返回的是一个空的迭代者
    System.out.println("Please Enter Number:"); 
    while(true) 

    try 

    b=System.in.read(); 

    catch(Exception e) 

    System.out.println(e.getMessage()); 

    if(b== '\r ' ¦b== '\n ') 
    break; 
    else 

    int num=b- '0 '; 
    a1.add(new Integer(num)); 


    int sum=0; 
    Iterator itr=a1.iterator();
    while(itr.hasNext()) 

    Integer intObj=(Integer)itr.next(); 
    sum+=intObj.intValue(); 

    System.out.println(sum); 
    } ##############################楼主可能进入了"一个实例的一个方法返回的引用都是一致"的思想误区实际上几乎所有Iterable的iterator()方法返回的引用都是不一样的你可以测试下ArrayList a1=new ArrayList(); 
    System.out.println(a1.iterator().hashcode());
    System.out.println(a1.iterator().hashcode());
    System.out.println(a1.iterator().hashcode());
    System.out.println(a1.iterator().hashcode());你参考下iterator()的实现就更加清楚了