public class ContainerTest 
{
public static void main(String[] args)throws Exception
{
Collection c=new ArrayList();
c.add(new String("hello"));
c.add(new Integer("23"));
c.add(new Integer("31"));
c.add(new String("USTC"));
c.add(new String("sdf"));
Iterator i=c.iterator();
while(i.hasNext())
{
String s;
Integer i1;
if(i.next() instanceof String)

s=(String)i.next();
System.out.println("1");
}
else
if(i.next() instanceof Integer)
{ i1=(Integer)i.next();System.out.println(10);}
}

}
}我的本意是对容器中相应的类型数据逐个输出,但是出现了转换错误,请教各位,麻烦帮帮忙啊!我还是一个初学者!

解决方案 »

  1.   

    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;public class ContainerTest {
    public static void main(String[] args) throws Exception {
    Collection c = new ArrayList();
    c.add(new String("hello"));
    c.add(new Integer("23"));
    c.add(new Integer("31"));
    c.add(new String("USTC"));
    c.add(new String("sdf"));
    Iterator i = c.iterator();
    while (i.hasNext()) {
    String s;
    Integer i1;
    Object o=i.next(); 
    if (o instanceof String) {
    s = (String)o;
    System.out.println(s);
    } else if (o instanceof Integer) {
    i1 = (Integer) o;
    System.out.println(i1);
    }
    }
    }
    }
      

  2.   

    楼上正解 ,你调用i.next指向容器中对象的指针就会往后移,
    if(i.next() instanceof String) 

    s=(String)i.next(); 
    System.out.println("1"); 

    else 
    if(i.next() instanceof Integer) 
    { i1=(Integer)i.next();System.out.println(10);} 
    }
    这里都调用了4次在倒数第3个元素的时候会出现 OutOfA 角标越界的异常。
      

  3.   

    1楼正解
    i.next取出的是Object,系统无法判断是不是String或者Integer的示例,所以才会发生转换错误
      

  4.   

    刚才乱讲了
    其实是这样的,楼主你的程序第一个数据new String("hello"),if(i.next() instanceof String)此时为真
    进入语句块内,而 s=(String)i.next(); 此时的i的指针指向了下一个数据,就是new Integer("23")
    你有要他强制转换成String,所以才会报转换错误,不知道我说清楚了没有
      

  5.   

    这不是String类型,Integer.valueOf(xxx); String.valueOf(yyy);
    这样才可以转换     
      

  6.   

    你多次调用i.next() 的时候,指针已经后移了多次了
      

  7.   

    循环内只调用一次next方法,你调用了3次
      

  8.   

    一楼正解,调用一次next()索引就会后移一次,你的程序当然就有问题了
      

  9.   

    一楼正解,我给出一个更简单的答案,可能脱离了楼主的原味了
    import java.util.*;public class ContainerTest {
        public static void main(String[] args) throws Exception {
            Collection<String> c = new ArrayList<String>();
            c.add("hello");
            c.add("23");
            c.add("31");
            c.add("USTC");
            c.add("sdf");
            Iterator i = c.iterator();
            while (i.hasNext()) {
                System.out.println(i.next());
            }
        }
    }
    只看结果,不看过程,OVER
      

  10.   

    咳...if(i.next() instanceof String) 这个语句已经从容器中取得了一个对象,然后你再s=(String)i.next();取得的是下一个对象..这样会出项类型不匹配异常