黑马程序员技术交流社区

标题: 从集合中取元素遇到的一个问题 [打印本页]

作者: 刘俊佳    时间: 2012-7-21 12:16
标题: 从集合中取元素遇到的一个问题
本帖最后由 刘俊佳 于 2012-7-21 21:19 编辑

package collection;
/*
add方法的参数类型是Object,以便于接受任意类型的对象
集合中存取的都是对象的引用(地址)
*/
import java.util.ArrayList;
import java.util.Vector;

import javax.swing.text.html.HTMLDocument.Iterator;

public class ConnectionDemo {
        public static void main(String[] args)
        {
               
                method_get();
        
        }
        public static void method_get()
        {
        ArrayList al=new ArrayList();
               
                //添加元素
                al.add("java01");
                al.add("java02");
                al.add("java03");
                al.add("java04");
               
                Iterator it=al.iterator();
               
                sop(it.next());
               
        }
        public static void sop(Object obj)
        {
                System.out.println(obj);
               
        }
}
报错信息如下:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
        Type mismatch: cannot convert from Iterator to HTMLDocument.Iterator
        The method sop(Object) in the type ConnectionDemo is not applicable for the arguments (void)

        at collection.ConnectionDemo.method_get(ConnectionDemo.java:28)
        at collection.ConnectionDemo.main(ConnectionDemo.java:15)

作者: 周玉龙    时间: 2012-7-21 12:28

/*
add方法的参数类型是Object,以便于接受任意类型的对象
集合中存取的都是对象的引用(地址)
*/
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.text.html.HTMLDocument.Iterator;//哥们这里你导错了包名.


public class ConnectionDemo {
        public static void main(String[] args)
        {
               
                method_get();
        
        }
        public static void method_get()
        {
        ArrayList al=new ArrayList();
               
                //添加元素
                al.add("java01");
                al.add("java02");
                al.add("java03");
                al.add("java04");
               
                Iterator it=al.iterator();
                //遍历一个集合不是这样的,你这里只是打印出了第一个元素,Iterator就相当于一个指针,第一次指向的是第一个元素.
                sop(it.next());
//遍历集合应该是这样的.方式一
        Iterator it=al.iterator();
                while(it.hasNext()){
                sop(it.next());
                }
                //方式二
                for(Object o :al){
                 sop(o);
                }
               
        }
        public static void sop(Object obj)
        {
                System.out.println(obj);
               
        }
}

作者: 李菁    时间: 2012-7-21 12:47
不是import javax.swing.text.html.HTMLDocument.Iterator; 应该导import java.util.Iterator;
而且迭代器遍历应该是
Iterator it=al.iterator();
while(it.hasNext()){
    sop(it.next());
}
你这个只打印出集合中的第一个元素

作者: 黑马振鹏    时间: 2012-7-21 12:53
Type mismatch: cannot convert from Iterator to HTMLDocument.Iterator
不能装换  Iterator  HTMLDocument.Iterator 这样就可以直接判断是不是导包的时候有问题,比较容易入手

作者: 刘俊佳    时间: 2012-7-21 17:57
李菁 发表于 2012-7-21 12:47
不是import javax.swing.text.html.HTMLDocument.Iterator; 应该导import java.util.Iterator;
而且迭代器 ...

原来是包导错了:L
作者: 郭凯敏    时间: 2012-7-22 04:16
这里纠正一下你的迭代器使用方法:
一般是这样才不会出错:
Iterator it=al.iterator();
while(it.hasNext())
{
    String str=(String)it.next();//由于你放进去的是字符串类型,所以取得时候也转为字符串,将it.next()赋给变量可以在开发中避免一些不必要的错误,例如我这个例子:
    System.out.println(str);
}
---------------------------------------------------------华丽的分割线-------------------------------------------------------------------

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/*
* 练习:用集合存储自定义对象,并输出每个对象元素.并画内存图
*/
public class IteratorTest {
public static void main(String[] args) {
  ArrayList<Student> c = new ArrayList<Student>();
  
  Student s1 = new Student();
  s1.setName("欧阳锋");
  s1.setAge(88);
  
  Student s2 = new Student();
  s2.setName("郭靖");
  s2.setAge(66);
  
  Student s3 = new Student();
  s3.setName("杨过");
  s3.setAge(48);
  
  c.add(s1);
  c.add(s2);
  c.add(s3);
  
  //System.out.println(c);
  Iterator<Student> it = c.iterator();
  while(it.hasNext()){
   Student s = (Student)it.next();
   System.out.println(s.getName()+"***"+s.getAge());
//   System.out.println(((Student)it.next()).getName()+"***"+((Student)it.next()).getAge());//这种写法编译不不错,但是运行就挂了,而上面的将it.next()赋给Student对象则安全
  }
}
}
---------------------------------------------------------华丽的分割线-------------------------------------------------------------------

/*
* 自定义对象
*/
public class Student {
private String name;
private int age;
public Student() {
}
public String getName() {
  return name;
}
public void setName(String name) {
  this.name = name;
}
public int getAge() {
  return age;
}
public void setAge(int age) {
  this.age = age;
}
}








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2