黑马程序员技术交流社区

标题: Map扩展练习时出现问题了 [打印本页]

作者: 范龙波    时间: 2013-5-7 21:58
标题: Map扩展练习时出现问题了
本帖最后由 范龙波 于 2013-5-8 05:21 编辑

import java.util.*;



class  StudentDemo
{
        public static void main(String[] args)
        {
                HashMap<String,HashMap> CZBK=new HashMap<String,HashMap>();
                HashMap<String,Integer> YuReBan=new HashMap<String,Integer>();
                HashMap<String,Integer> JiuYeBan=new HashMap<String,Integer>();
                CZBK.put("第一层",YuReBan);
                CZBK.put("第二层",JiuYeBan);
                YuReBan.put("lisi01",26);
                YuReBan.put("lisi02",29);
                YuReBan.put("lisi03",26);
                YuReBan.put("lisi04",29);
                JiuYeBan.put("李四02",28);
                JiuYeBan.put("李四01",29);
                sop(YuReBan);
                sop(JiuYeBan);
                sop(CZBK);
                GetMap(YuReBan);                      //为什么只能打印出YuReBan的lisi02 和04 其他的打印不出来呢?
               
               



        }
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
        public static void GetMap(HashMap<String,Integer> tm)
        {
                Iterator<String> it=tm.keySet().iterator();
                while(it.hasNext())
                {
                        String name=it.next();
                        Integer age=tm.get(it.next());
                        System.out.println(name+"\t"+age);
                }
        }
        

}



作者: 杜超    时间: 2013-5-7 22:37
本帖最后由 杜超 于 2013-5-7 22:43 编辑

   Integer age=tm.get(it.next());这句话的问题

你把it.next()给位name就可以了,这里不能把方法作为键获取值的,
it.next()有特殊含义的,把他作为参数传进去得到的是下一个键,获取的是下一个键的值
所以只获取2个,而且这两个键和值不是对应的,你把年龄改成不一样的就看出来了


作者: 风乐    时间: 2013-5-7 22:46
Integer age=tm.get(it.next());里面的it.next()改成name,你用了两个it.next(),他就走了两个才打印一个
作者: 范龙波    时间: 2013-5-8 04:40
啊,明白了,第二次犯这种错误了。谢了




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