2 u014332703 u014332703 于 2014.12.14 12:31 提问

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

}

8个回答

a1308493612a
a1308493612a   2014.12.14 13:00
已采纳

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

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

yangyanggoods
yangyanggoods 回复u014332703: 因为你这个a是用int转成Integer的,所以不可能为null……
大约 3 年之前 回复
u014332703
u014332703 回复a1308493612a: 谢谢大神!那我的错误在哪里呢?可以讲一讲吗......
大约 3 年之前 回复
a1308493612a
a1308493612a 回复u014332703: if(!map.containsKey(a))
大约 3 年之前 回复
u014332703
u014332703 狂按F5中
大约 3 年之前 回复
u014332703
u014332703 回复u014332703: ′
大约 3 年之前 回复
u014332703
u014332703 那是我逻辑有问题了,那么怎么才能进去呢?求大神解答。。狂按′
大约 3 年之前 回复
habit_reflection
habit_reflection   2014.12.14 12:50

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

u014332703
u014332703 将else循环语句删除后,运行后没有输出。说明map里面没有值,请问这是为什么呢?
大约 3 年之前 回复
guwei4037
guwei4037   Ds   Rxr 2014.12.14 12:53

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

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

u014332703
u014332703 我的程序实现逻辑是先判断这个key有没有指向,如果指向不是null才会进入else循环,我不明白为什么会没有key,能说一下吗?谢谢
大约 3 年之前 回复
habit_reflection
habit_reflection   2014.12.14 12:53

我的回答好像有错误,我发现我不能帮你解决问题了,空指针是为空,你需要找到哪里为空

hmx224_2014
hmx224_2014   2014.12.14 18:12

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

babys
babys   2014.12.14 20:51
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的操作上的。

xunlijiang
xunlijiang   2014.12.28 00:41

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
第三,原谅我的啰嗦
xunlijiang
xunlijiang   2014.12.28 00:43

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
第三,原谅我的啰嗦
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!