导致NullPointerException的java程序
这是一个名为“Algorithm.java”的文件
package leetcode;
import java.util.HashMap;
import java.util.Map;
public class Algorithms {
public static int romanToInteger(String roman) {
Map<String, Integer> romanValues = new HashMap<>();
romanValues.put("I", 1);
romanValues.put("V", 5);
romanValues.put("X", 10);
romanValues.put("L", 50);
romanValues.put("C", 100);
romanValues.put("D", 500);
romanValues.put("M", 1000);
int integer = romanValues.get(Character.toString(roman.charAt(roman.length() - 1)));
int previousValue = integer, current;
for (int i = roman.length() - 2; i >= 0; i--) {
current = romanValues.get(Character.toString(roman.charAt(i)));
if (current < previousValue) {
integer -= current;
} else {
integer += current;
}
previousValue = current;
}
return integer;
}
}
这里是我调用代码的“Main.java”
package leetcode;
public class Main {
public static void main(String[] args) {
System.out.println(Algorithms.romanToInteger("XII"));
}
}
我是Java新手,我不明白为什么这行代码会导致NullPointerException
int integer = romanValues.get(roman.charAt(roman.length() - 1));
但当我转换价值观时。将get()参数设置为如下字符串
int integer = romanValues.get(Character.toString(roman.charAt(roman.length() - 1)));
它运行良好
# 1 楼答案
int integer = romanValues.get(roman.charAt(roman.length() - 1));
让我们回顾一下失败代码中的操作顺序:
roman.charAt(roman.length() - 1)
返回roman
字符串的最后一个char
romanValues.get
根据运行时的{int integer = null
导致取消装箱(必须将Integer
转换为原语int
),而此尝试导致NullPointerException
,因为null
由get
返回李>因此,为了让上述代码使用} 为缺少的键提供默认值:
Character
键,还可以修复romanValues
映射中键的类型,并可能使用^{# 2 楼答案
地图。获取:地图。如果指定的键为null,并且此映射不允许null键(可选),则get return返回null
绳子。charAt(roman.charAt):返回char
因此值的键(Map<;String,Integer>;)是绳子。这是char和String之间的区别
例如