public class Solution {
public static void main(String[] args) {
System.out.println(romanToInt("DCXXI"));
}
public static int romanToInt(String s) {
int ln = s.length()-1;
int ans = 0;
int i=0;
while (i <=ln){
if (s.charAt(i) == 'M'){
ans += 1000;
}else if (s.charAt(i) == 'D'){
ans += 500;
}else if (s.charAt(i) == 'C' && s.charAt(i+1)=='D'){
ans += 400;
i=i+1;
}else if (s.charAt(i) == 'C' && s.charAt(i+1)=='M'){
ans += 900;
i=i+1;
}else if (s.charAt(i) == 'C'){
ans += 100;
}else if (s.charAt(i) == 'L'){
ans += 50;
}else if (s.charAt(i) == 'X' && s.charAt(i+1)=='L'){
ans += 40;
i=i+1;
}else if (s.charAt(i) == 'X' && s.charAt(i+1)=='C'){
ans += 90;
i=i+1;
}else if (s.charAt(i) == 'X'){
ans += 10;
}else if (s.charAt(i) == 'V'){
ans += 5;
}else if (s.charAt(i)=='I' && s.charAt(i+1)=='V'){
ans += 4;
i=i+1;
}else if (s.charAt(i)=='I' && s.charAt(i+1)=='X'){
ans += 9;
i=i+1;
}else if (s.charAt(i)=='I'){
ans += 1;
}
i++;
System.out.printf("Current sum is: %s and current pointer i is: %s \n",ans, i);
}
return ans;
}
}
我不断收到错误消息
java.lang.StringIndexOutOfBoundsException:字符串索引超出范围: 5
但我无法找到错误的地方。有人能帮我吗? 输出: 这是D. 当前总和为:500,当前指针i为:1 这是C. 当前总和是:600,当前指针i是:2 这是X. 当前总和是:610,当前指针i是:3 这是X. 当前总和是:620,当前指针i是:4 线程“main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:5 在java.lang.String.charAt(未知来源) 在Solution.romanToInt(Solution.java:65) 在Solution.main(Solution.java:9)
答案 0 :(得分:0)
你设置
int ln = s.length()-1;
并使用
while (i <=ln){....}
然后得到
s.charAt(i+1)
所以它可能是i + 1&gt; = s.length();
然后s.charAt(i + 1)将抛出异常
答案 1 :(得分:0)
这两个“else if”案件引起了例外:
}else if (s.charAt(i+1)=='I' && s.charAt(i+1)=='V'){
....
}else if (s.charAt(i+1)=='I' && s.charAt(i+1)=='X'){
....
答案 2 :(得分:0)
这里的问题是当你在所提供的字符串的最后一个字符时,你有时会测试string.charAt(i + 1)导致你的IndexOutofBound异常。