我实际上是尝试使用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);
答案 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)));
}
}
希望有所帮助