A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kira 中级黑马   /  2014-1-26 15:57  /  1272 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

需求是这样的
用这个泛型限定 搞定学生中继承人的所有姓名 用ArrayList添加对象 并迭代出来
下面是我写的代码 关键地方都有注释
  1. import java.util.ArrayList;
  2. import java.util.Iterator;

  3. public class GenLimitDemo {

  4.         /**
  5.          * @param args
  6.          */
  7.         public static void main(String[] args) {
  8.                 // TODO Auto-generated method stub
  9.           ArrayList<Person> alp = new ArrayList<Person>();
  10.           ArrayList<Stu> alu = new ArrayList<Stu>();
  11.           alp.add(new Person("zhangsan",10));//加几个人
  12.           alp.add(new Person("lisi",11));//加几个人
  13.           alp.add(new Person("wangwu",12));//加几个人
  14.           alu.add(new Stu("mark",20));//加几个学生
  15.           alu.add(new Stu("jim",22));//加几个学生
  16.           alu.add(new Stu("sam",27));//加几个学生
  17.           printAl(alu);//调用打印方法
  18.          
  19.         }
  20.         public static void printAl(ArrayList<? extends Person> al){
  21. //                ArrayList<? extends Person> newal = new ArrayList<? extends Person>();
  22.                 for(Iterator<? extends Person> it = al.iterator();it.hasNext();){
  23.                         System.out.println(it.next().getName()+"..."+it.next().getAge());
  24.                        
  25.                 }
  26.                
  27.                
  28.         }

  29. }
  30. class Person{//定义人类
  31.         private String name;
  32.         private int age;
  33.         Person(String name,int age){
  34.                 this.name=name;
  35.                 this.age=age;
  36.        
  37.                
  38.         }
  39.         public String getName(){
  40.                
  41.                 return this.name;
  42.         }
  43.         public int getAge(){
  44.                
  45.                 return this.age;
  46.         }
  47.        
  48. }
  49. class Stu extends Person{//学生类

  50.         Stu(String name, int age) {
  51.                 super(name, age);
  52.                
  53.         }
  54.        
  55.        
  56.        
  57.        
  58. }
复制代码
运行结果是第一个对象打印了 后面却出现 NoSuchElementException(没有这个元素异常)

然后 我注释掉我的方法调用之后发现没问题
请问大神我定义的迭代方法那 到底是错在哪了 该如何修改 拜谢{:soso_e136:}
PS:话说最近怎么都没技术分了{:soso_e109:}

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

4 个回复

倒序浏览
ヅ飞飞 来自手机 中级黑马 2014-1-26 17:47:20
沙发
因为你定义的方法中的输出语句每次执行都会调用两次it.next(),
next方法每调用一次指向元素的指针向后移一个,所以输出语句
中不能出现两个next方法,如果如此打印的是第一个元素的
name和第二个元素的age.
相当于每次输出两个元素,如果集合中有奇数个元素,将报
没有下一个元素异常。

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
25行
  1. Person p=it.nxet();
  2. System.out.println(p.getName()+p.getAge());
复制代码

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
ヅ飞飞 发表于 2014-1-26 17:47
因为你定义的方法中的输出语句每次执行都会调用两次it.next(),
next方法每调用一次指向元素的指针向后移一 ...

原来如此 我本来还想一次性搞定 看来心急了:L 大神所言极是
回复 使用道具 举报

OK 果然是这样 谢啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马