黑马程序员技术交流社区

标题: 今晚做的一个题,运行有结果,可是报了异常 [打印本页]

作者: -_-#    时间: 2014-7-4 00:11
标题: 今晚做的一个题,运行有结果,可是报了异常
/*
* 编写一个类,在main方法中定义一个Map对象(采用泛型),加入若干个对象,然后遍历并打印出各元素的key和value。
*
* */
public class Text2 {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                TreeMap<String,String>  map=new TreeMap<String, String>();
                map.put("zhangsan","23");
                map.put("lisi","13");
                map.put("zhangjiafan","54");
                map.put("fengxun","24");
               
                //第一种方法
                Set  k=map.entrySet();
                Iterator m=k.iterator();
                while(m.hasNext())
                {
                        System.out.println(m.next());
                }
                //第二种方法
                Shu(map);
        }

       
        public static void Shu(TreeMap<String ,String> w)
        {
                TreeMap f=w;
                while(f.lastKey()!=null)
                {       
                        System.out.println("key="+f.firstKey()+"------"+"value="+f.get(f.firstKey()));
                        f.remove(f.firstKey());
                }
               
        }
}
主要看方法shu,在运行时,都打印出来了可是报了异常,运行结果如下
fengxun=24
lisi=13
zhangjiafan=54
zhangsan=23
key=fengxun------value=24
key=lisi------value=13
key=zhangjiafan------value=54
key=zhangsan------value=23
Exception in thread "main" java.util.NoSuchElementException
        at java.util.TreeMap.key(TreeMap.java:1221)
        at java.util.TreeMap.lastKey(TreeMap.java:292)
        at examTest.Text2.Shu(Text2.java:33)
        at examTest.Text2.main(Text2.java:26)
作者: java_learner    时间: 2014-7-4 00:35
当f.remove()方法移除最后一对键值对集合变为空时,再调用while中的f.lastKey()时,会抛出NoSuchElementException的C:\Documents and Settings\Administrator\桌面\HO4)92UD`E@S%5BG9C}WPHY0O.jpg
作者: 毅心缘    时间: 2014-7-4 00:47
本帖最后由 毅心缘 于 2014-7-4 00:49 编辑

楼主请看
  1. import java.util.*;

  2. public class Test3 {

  3.         public static void main(String[] args) {
  4.                 Map<String, String> map = new TreeMap<String, String>();
  5.                 map.put("23", "zhangsan");
  6.                 map.put("13","lisi" );
  7.                 map.put("54", "zhangjiafan");
  8.                 map.put("24", "fengxun");

  9.                 getKey(map);
  10.                 // getEntry();
  11.         }

  12.         public static void getKey(Map<String, String> map) {
  13.                 Set<String> keySet = map.keySet();
  14.                 Iterator<String> it = keySet.iterator();
  15.                 while (it.hasNext()) {
  16.                         String key = it.next();
  17.                         String value = map.get(key);
  18.                         System.out.println("key:" + key + "   value:" + value);
  19.                 }
  20.         }

  21.         public static void getEntry(Map<String, String> map) {
  22.                 Set<Map.Entry<String, String>> entrySet = map.entrySet();
  23.                 Iterator<Map.Entry<String, String>> it = entrySet.iterator();
  24.                 while (it.hasNext()) {
  25.                         Map.Entry<String, String> ma = it.next();
  26.                         String key = ma.getKey();
  27.                         String value = ma.getValue();
  28.                         System.out.println("key:" + key + "   value:" + value);
  29.                 }
  30.         }

  31. }
复制代码




作者: -_-#    时间: 2014-7-4 15:02
毅心缘 发表于 2014-7-4 00:47
楼主请看

你的方法不错。。。。我只是想知道我代码出现什么问题而已,,谢谢了~!
作者: -_-#    时间: 2014-7-4 15:03
java_learner 发表于 2014-7-4 00:35
当f.remove()方法移除最后一对键值对集合变为空时,再调用while中的f.lastKey()时,会抛出NoSuchElementExcep ...

有啥好解决的方法呢?
作者: on-on    时间: 2014-7-4 16:51
你的while循环有问题,你想一下,当你把集合中的所有元素都取光了,这个集合没有任何元素,那怎么还会有key啊,你要判断的是map集合是不是为空,对吧,所以应该像下面这样改就没问题了!
public static void Shu(TreeMap<String ,String> w)
    {
            TreeMap f=w;
            while(!w.isEmpty())
            {        
                    System.out.println("key="+f.firstKey()+"------"+"value="+f.get(f.firstKey()));
                    f.remove(f.firstKey());
            }
            
    }
作者: on-on    时间: 2014-7-4 16:55
修正一下 while(!f.isEmpty()),因为你操作的是f,所以判断f就行了
作者: 宋卫华    时间: 2014-7-4 17:04
:loveliness:                                 




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