问题是Roman to Integer:link。 给定罗马数字,将其转换为整数。 输入保证在1到3999的范围内。 所以我先在答案中使用了toCharArray()方法。
public int romanToInt(String s) {
HashMap<String, Integer> dict = new HashMap<String, Integer>();
dict.put("I", 1);
dict.put("V", 5);
dict.put("X", 10);
dict.put("L", 50);
dict.put("C", 100);
dict.put("D", 500);
dict.put("M", 100);
int sum = 0;
char[] arrayS = s.toCharArray();
for(int i = 0 ; i < arrayS.length ; i++){
int Val1 = dict.get(arrayS[i]).intValue();
if(i < arrayS.length -1){
int Val2 = dict.get(arrayS[i+1]).intValue();
if(Val1 < Val2){
sum += Val2 - Val1;
i++;}
else
sum += Val1;
}
else
sum += Val1;
}
return sum;
}
然后在位置int Val1 = dict.get(arrayS[i]);
中,编译器显示Line 19: java.lang.NullPointerException
。但是,如果我在没有toCharArray()的情况下重写它,它就可以工作。
int sum = 0;
int val1, val2;
for (int i = 0; i < s.length(); i++) {
val1 = map.get(s.charAt(i));
if (i < s.length()-1) {
val2 = map.get(s.charAt(i+1));
if (val1 >= val2) {
sum += val1;
} else {
sum += (val2 - val1);
i += 1;
}
} else {
sum += val1;
}
}
return sum;
使用toCharArray()时,为什么遇到java.lang.NullPointerException
问题?
答案 0 :(得分:0)
dict.get(arrayS[i]);
会返回null
从Integer到int的取消装箱会导致NullPointerException
。
答案 1 :(得分:0)
您的代码的问题在于您创建了一个HashMap,它将String映射到整数,但您将一个字符作为参数传递给romanToInt方法。 您可以通过两种方式解决问题
解决方案1 -
public int romanToInt(String s)
{
HashMap<String, Integer> dict = new HashMap<String, Integer>();
dict.put("I", 1);
dict.put("V", 5);
dict.put("X", 10);
dict.put("L", 50);
dict.put("C", 100);
dict.put("D", 500);
dict.put("M", 100);
int sum = 0;
char[] arrayS = s.toCharArray();
for(int i = 0 ; i < arrayS.length ; i++)
{
int Val1 = dict.get(String.valueOf(arrayS[i])); // Convert character to string
if(i < arrayS.length -1)
{
int Val2 = dict.get(String.valueOf(arrayS[i+1])); //Convert character to string
if(Val1 < Val2)
{
sum += Val2 - Val1;
i++;
}
else
sum += Val1;
}
else
sum += Val1;
}
return sum;
}
解决方案2 -
public int romanToInt(String s)
{
HashMap<Character, Integer> dict = new HashMap<Character, Integer>();
//Map Character to Integer
dict.put('I', 1); //Used single quote to represent character
dict.put('V', 5);
dict.put('X', 10);
dict.put('L', 50);
dict.put('C', 100);
dict.put('D', 500);
dict.put('M', 100);
int sum = 0;
char[] arrayS = s.toCharArray();
for(int i = 0 ; i < arrayS.length ; i++)
{
int Val1 = dict.get(arrayS[i]);
if(i < arrayS.length -1)
{
int Val2 = dict.get(arrayS[i+1]);
if(Val1 < Val2)
{
sum += Val2 - Val1;
i++;
}
else
sum += Val1;
}
else
sum += Val1;
}
return sum;
}
答案 2 :(得分:0)
实际上我在数据类型上犯了一个错误。我使用Char数组,元素是Char类型。我试图使用dict.get(arrayS[i])
,因为我构建了HashMap<String, Integer>
,因此arrayS [i]应该是一个String类型。
然后我将HashMap<String, Integer>
更改为HashMap<Character, Integer>
然后才有效。
感谢Tom @Tom指出我的问题。