0
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 线程“主”java.lang.StringIndexOutOfBoundsException 中的异常:字符串索引超出范围:5 at java.lang.String.charAt(Unknown Source) at Solution.romanToInt(Solution. java:65) 在 Solution.main(Solution.java:9)

4

3 回答 3

0

你设置

int ln = s.length()-1;

并使用

while (i <=ln){....}

然后得到

s.charAt(i+1)

所以它可能是 i+1 >= s.length();

然后 s.charAt(i+1) 将抛出异常

于 2015-01-19T03:26:23.530 回答
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'){
         ....
于 2015-01-19T03:32:24.020 回答
0

这里的问题是,当您在提供的字符串的最后一个字符处时,您有时正在测试导致您的 IndexOutofBound 异常的 string.charAt(i+1) 。

于 2015-01-19T03:33:39.317 回答