为了账号安全,请及时绑定邮箱和手机立即绑定

关于java中NullPointerException,求帮忙——来自java菜鸟的呼声

关于java中NullPointerException,求帮忙——来自java菜鸟的呼声

湖上湖 2019-04-18 18:15:39
package test1;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Random;import java.util.Set;public class CountNumber //对数字进行计数并统计出每个数字出现的次数{public static void main(String[] args)  {  Random random = new Random();  HashMap  map = new HashMap();  for(int i = 0; i < 50 ; i ++)  //随机生成50的数并以map类对象存储  {         int a = random.nextInt();      if((Integer)a == null)     //如果该key指向null,说明未出现过,直接存入map中      {          map.put(a, new Integer(1));      }      else                       //否则出现过,将key对应的value值加1      {              //程序在这行报错   java.lang.NullPointerException             map.put(a,new Integer((Integer)(map.get(a))).intValue() + 1);        }  }  Set set = map.entrySet();  for(Iterator itr =  set.iterator();itr.hasNext(); )  {      Map.Entry s = (Map.Entry)itr.next();      String key = (String)s.getKey();      String value = (String)s.getValue();      System.out.print(key + " " + value);  } }}
查看完整描述

7 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

if((Integer)a == null) //如果该key指向null,说明未出现过,直接存入map中
{
map.put(a, new Integer(1));
}

这里就压根不会进去~~~map中就没有值~~


查看完整回答
反对 回复 2019-05-07
?
MYYA

TA贡献1868条经验 获得超4个赞

这个错误是空指针错误,我遇到了后,处理的办法是将map输出看看看里面有没有值


查看完整回答
反对 回复 2019-05-07
?
墨色风雨

TA贡献1853条经验 获得超6个赞

map.put(a,new Integer((Integer)(map.get(a))).intValue() + 1);

map.get(a) 是根据key找值,没有key当然报空指针异常了。

查看完整回答
反对 回复 2019-05-07
?
慕慕森

TA贡献1856条经验 获得超17个赞

你要检查一下,是哪个地方时空指针,
可能路径不对

查看完整回答
反对 回复 2019-05-07
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

public void xxx() {
    Map<Integer, Integer> countMap = new HashMap<Integer, Integer>();
    Random random = new Random();
    for (int i = 0; i < 50; i++) {
        int randomInt = random.nextInt(20);
        Integer oldValue = countMap.get(randomInt);
        countMap.put(randomInt, oldValue == null ? 1 : oldValue + 1);

    }
    for (Integer key : countMap.keySet()) {
        System.out.println("key:" + key + " count:" + countMap.get(key));
    }
}

自己对照看看,你的问题主要在MAP的操作上的。


查看完整回答
反对 回复 2019-05-07
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

public static void main(String[] args) {
HashMap map = new HashMap();
for(int i=0;i<50;i++){
Integer count;
int a =new Random().nextInt(10);
count = map.get(a);
if(count==null){
map.put(a, 1);
}else map.put(a, count+1);
}
System.out.println(map);
}

第一,建议你随即的数有个范围,我给了[0,10),你没范围可能随即到相同的数吗?比卖彩票的几率都小的多
第二,KEY和VALUE都可以是null,根据hashmap的规则,KEY不能重复,你还能用KEY来判断是不是同一个数吗?
所以你要用VALUE来判断是不是同一个数,随即的数来作为KEY,放进来的次数作为VALUE,你同过get(key)可以的到key所对应的值,
第一次到,那你在map里找不到,返回的就是null
第三,原谅我的啰嗦


查看完整回答
反对 回复 2019-05-07
  • 7 回答
  • 0 关注
  • 472 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信