qq_33186495 2016-02-25 03:42 采纳率: 100%
浏览 1555
已采纳

Java 程序输出不一样,请问为啥

 package learn;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class MapTest2 {

    public static void main (String[] args){
        HashMap map = new HashMap();
        int t;

        for(int i=0; i<args.length;i++){
            if(map.get(args[i])!=null){
                t = (int)map.get(args[i]);
                map.put(args[i],new Integer(t+1));
            }
            else{
                map.put(args[i],new Integer(1));
            }
        }
        Set set = map.keySet();




        for(Iterator iter = set.iterator();iter.hasNext();){
            String  c = (String)iter.next();
            Integer a = (Integer)map.get(c);

            System.out.println("name:"+c+"number:"+a);
        }
    }
}
Integer a = (Integer)map.get(c);
这一句中如果是c的话 输出正常,是:

name:worlsnumber:3
name:worldnumber:1
如果是
(String)iter.next()
的话输出不正常,是:
name:worlsnumber:1

IDE eclipse mars
运行参数: worls worls world worls

  • 写回答

3条回答

  • 毕小宝 博客专家认证 2016-02-25 04:44
    关注

    你的代码是没有问题的,肯定只有c=iter.next()时直接取当前这个key对应的值才正确啊。
    如果是下面这样:

     String  c = (String)iter.next();
     Integer a = (Integer)map.get((String)iter.next());
    
    

    上面代码执行了两次next,相当于你直接跳跃遍历了,第一个元素c你没有处理,直接跳到下一个元素了。当然就只输出了一条记录。
    实际上是由多少条记录,就应该执行多少次next才对。所以,只能每判断一次hasNext,就执行一次获取操作next()。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥30 求解达问题(有红包)