問題是羅馬整數:link。 給定一個羅馬數字,將其轉換爲整數。 輸入保證在1到3999的範圍內。 所以我在我的答案中首先使用了toCharArray()方法。當我使用toCharArray()方法時,爲什麼會得到java.lang.NullPointerException?
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
問題?
當你調試這個時,哪個對象是'null'?你期望該物體被分配一個值? – David
可能是因爲's'本身是'null'。 – user2004685
爲了清楚這一點:你真的認爲,當你問一個帶'String'的地圖作爲返回除null之外的其他關鍵字的地圖時,當你問它是否包含某個'char'時?你爲什麼這麼認爲? – Tom