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: 範囲外の文字列インデックス: java.lang.String.charAt(不明なソース) で Solution.romanToInt(Solution. java:65) Solution.main (Solution.java:9) で

4

3 に答える 3

0

次の 2 つの "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

ここでの問題は、提供された文字列の最後の文字にいるときに、場合によっては string.charAt(i+1) をテストしているため、IndexOutofBound 例外が発生することです。

于 2015-01-19T03:33:39.317 に答える
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 に答える