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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zc332750 中级黑马   /  2014-2-10 10:06  /  1345 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zc332750 于 2014-2-10 10:09 编辑

import java.util.HashMap; import java.util.Iterator;
    public class MapTest  {
          public static void main(String[] args)  {
               HashMap map = new HashMap();
               map.put("a", "zhangsan");
               map.put("b", "lisi");
               map.put("d", "wangwu");
               map.put("e", "zhaoliu");
                map.put("f", "yangqi");
              for(Iterator iter = map.keySet().iterator();iter.hasNext();)  {
                   System.out.println(iter.next());
                  System.out.println( map.get(iter.next()));
               }
    } 中的
System.out.println(iter.next());  System.out.println( map.get(iter.next()));
如果注释一行运行一行都能成功,两个放一起就不成功了,为什么,求高手指点

评分

参与人数 1技术分 +10 收起 理由
滔哥 + 10 刷分无意义,直接给你满分25分.

查看全部评分

2 个回复

倒序浏览
你出现错误的情况是因为:没调用一次iter.next(),都会输出一次,你for中如果输出两次的话,就相当于一次性的输出了两个对象,但是在判断时iter.hasNext();只能判断一次下一个是否为空 ,所以当集合中有奇数个对象时,最后一次判断时,集合中还有一个对象没有获取,但是在执行for语句时,剩下的那个对象只能满足一个iter.next(),而第二个iter.next()没有对象可以调用,因此返回错误

for(Iterator iter = map.keySet().iterator();iter.hasNext();)  {
                   System.out.println(iter.next());
                  System.out.println( map.get(iter.next()));
               }

你可以自己定义六个对象试一试
map.put("a", "zhangsan");
               map.put("b", "lisi");
               map.put("d", "wangwu");
               map.put("e", "zhaoliu");
                map.put("f", "yangqi");
                map.put("g","haha");
回复 使用道具 举报
问题出在下面的代码里:
System.out.println(iter.next());
System.out.println( map.get(iter.next()));
每调用一次next方法,指针都会移动一次;你每循环一次,指针就移动两次,导致指针越界,因为正常情况下是循环一次,指针移动一次,循环次数和指针移动次数应该相同
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马