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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
请问下面的程序一共输出多少个“-”?
题目:int main(void) {     int i;     for (i = 0; i < 2; i++) {          fork();          printf("-");      }      return 0;  }  A、2 B、4 C、6 D、8 答案:D 解析: fork函数是计算机程序设计中的分叉函数。返回值: 若成功调用一次则返回两个值,
fork()请问下面的程序一共输出多少个“-”?
fork() 题目:请问下面的程序一共输出多少个“-”? #include #include #include int main(void) { int i; for(i=0; i<2; i++){ fork(); printf("-"); } return 0; } 解析:一共输出8个 首先程序一开始
Java中的二维数组和C/C++中二维数组的区别
Java中没有真正的多维数组,可以建立数组的数组(的数组……),由此得到多维数组,其下每个数组是独立的,可以独立分配内存大小,跟C语言的数组不一样,C语言的数组每一维的内存大小都一样。在C/C++中,我们定义的变量所需的空间都是分配在栈上的,而new所需的空间都是分配在堆上的 在栈上的变量必须在代码中明确指出大小,所以在C/C++中定义数组必须指定大小 而JAVA中所有的变量都是引用,换个角度理
2个在EXCEL的窗体的测试
测试窗体的焦点。2个窗体在点击上不一样,请问怎么实现统一。
fork循环
题目:请问下面的程序一共输出多少个“-”? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include #include #include   int main(void) {    int
poj编译不通过,运行出错的解决方法
这几天我在poj上做题,发现了一个奇怪的现象,有时候好不容易编出来的程序,在本地运行得好好的,输出的结果也对,但提交之后,却不能通过,常常不能编译,有时候编译成功了,却提示Runtime Error.这到底是什么问题呢? 经过分析,我发现,编译失败是因为编译器选错了。如果你用的是dev c++,那么提交时“language”一栏中应选择g++,如果用的是VC++,那么应该选择C++,这样才能
打印结果和调试结果不一样(C语言)
【0】README0.1)本文旨在阐述 个人的debug经历,遇到的各种debug 奇葩问题, 说是奇葩,其实也是自己 不小心或者说是编程习惯不好;【1】debug和running的运行结果不一致(乍眼一看,你肯定醉了)1.1)原因:这是因为, 运行是时候,temp内部分配失败,为null, 所以直接返回了,所以swap失败;而在debug的时候, temp内存分配成功, 不为null, 所以swa
第一次和第二次的执行计划为啥不一样
下面的sql执行了两次,发现两次的执行计划有不一致的地方。recursive calls(递归调用)第一次是284,第二次是0。consistent gets(一致性读),第一次是88,第二次是2。为什么?问了下c哥,第一次执行sql的时候,需要硬解析sql代码。第二次执行的时候share pool area已经存在执行计划,直接拿来用即可。这些知识在书里都看过,但还是需要实际操作才印象深刻啊
java面试题
Java面试题包含前端和后台基础技术点 凑数地区委屈委屈委屈we千万请问请问请问
javascript刷题知识记录
1. Javascript是弱类型语言,但是明显字符串“40”不能用于 % 运算符,所以会根据后面的类型进行转化,最后结果是 52. arr是个对象数组,reverse和sort只是改了arr的内容,返回的依然是arr对象本身,而concat返回的是新的对象,这里考的点是浅拷贝和深度拷贝,concat和slice常用来做深度拷贝 push返回数组的新的长度 reverse、sort返回数组本