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

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);
 }
}

}


湖上湖
浏览 473回答 7
7回答

肥皂起泡泡

if((Integer)a == null) //如果该key指向null,说明未出现过,直接存入map中{map.put(a, new Integer(1));}这里就压根不会进去~~~map中就没有值~~

MYYA

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

墨色风雨

map.put(a,new Integer((Integer)(map.get(a))).intValue() + 1);map.get(a) 是根据key找值,没有key当然报空指针异常了。

慕慕森

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

泛舟湖上清波郎朗

public&nbsp;void&nbsp;xxx()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;Map<Integer,&nbsp;Integer>&nbsp;countMap&nbsp;=&nbsp;new&nbsp;HashMap<Integer,&nbsp;Integer>(); &nbsp;&nbsp;&nbsp;&nbsp;Random&nbsp;random&nbsp;=&nbsp;new&nbsp;Random(); &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;50;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;randomInt&nbsp;=&nbsp;random.nextInt(20); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;oldValue&nbsp;=&nbsp;countMap.get(randomInt); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;countMap.put(randomInt,&nbsp;oldValue&nbsp;==&nbsp;null&nbsp;?&nbsp;1&nbsp;:&nbsp;oldValue&nbsp;+&nbsp;1); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(Integer&nbsp;key&nbsp;:&nbsp;countMap.keySet())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("key:"&nbsp;+&nbsp;key&nbsp;+&nbsp;"&nbsp;count:"&nbsp;+&nbsp;countMap.get(key)); &nbsp;&nbsp;&nbsp;&nbsp;} }自己对照看看,你的问题主要在MAP的操作上的。

哆啦的时光机

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 第三,原谅我的啰嗦
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java