无法解决" NullPointerException"

时间:2015-08-23 09:14:19

标签: java

我实际上是尝试使用get(Object key)函数来获取hashmap值。 但是下面的代码是NullPointerException

 count+=hm.get((int)str.charAt(i));

所以请帮我解决。

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
     String str = String.valueOf(br.readLine());
     HashMap<Integer,Integer> hm =new HashMap<Integer,Integer>();
     hm.put(0, 6);
     hm.put(1, 2);
     hm.put(2, 5);
     hm.put(3, 5);
     hm.put(4, 4);
     hm.put(5, 5);
     hm.put(6, 6);
     hm.put(7, 3);
     hm.put(8, 7);
     hm.put(9, 6);
long count=0;

//System.out.println(hm.get(9));
     for(int i=0;i<str.length();i++)
     {

         count+=hm.get((int)str.charAt(i));
     }
     System.out.println(count);

3 个答案:

答案 0 :(得分:1)

如果你想摆脱类型转换,请将地图声明为

HashMap<Character,Integer> hm =new HashMap<Character,Integer>();
hm.put('0', 6);
hm.put('1', 2);
hm.put('2', 5);
.....
long count=0;

for(int i=0;i<str.length();i++)
{
     count+=hm.get(str.charAt(i));
}

答案 1 :(得分:0)

当您转换char方法返回charAt int时,您将获得该字符的Unicode代码点。例如(int)'1'会给你49,但你的地图没有49的条目。

要解决此问题,您可以将映射定义为HashMap<Character, Integer>,或使用Character.getNumericValue而不是转换为int。

hm.get(Character.getNumericValue(str.charAt(i)));

答案 2 :(得分:0)

以下代码可能是更好的选择

首先,您应该检查表达式str.charAt(i)是否可以作为数字。那么数字应该存在于hashmap

char ch = str.charAt(i);
if (Character.isDigit(ch)) {
    if (hm.containsKey(Integer.parseInt(String.valueOf(ch)))) {
        count+=hm.get(Integer.parseInt(String.valueOf(ch)));
    }
}

希望有所帮助