2 qq 33186495 qq_33186495 于 2016.02.25 11:42 提问

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个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.02.25 12:44
已采纳

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

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

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

qq_33186495
qq_33186495 原来是这样!!!太感谢了
接近 2 年之前 回复
zrf1335348191
zrf1335348191   2016.02.25 12:55

同意楼上,你第二种方法相当于是在循环里做了两次i++,数据肯定对不上

mouyong
mouyong   2016.02.25 12:54

题目描述不太清楚,所以不知道有什么问题。

如果是
(String)iter.next()
的话输出不正常,是:
name:worlsnumber:1
这一段不明白是啥意思。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!