程序正在切断First Integer

时间:2014-11-21 21:24:35

标签: java bluej roman-numerals

我有这种方法应该将罗马数字转换成整数,但是当我输入罗马数字时它会切掉第一个字母,所以当我输入“IV”时,我得到的是5而不是4。之前我有过同样的问题,但只是它切断了最后一个字母,但我修复了它。这是下面粘贴的方法。谢谢。如果您发现任何其他错误,也请告诉我。

     public int romanToArabic()
    {
    int sum = 0;
    int i;
    for(i=0; i<=roman.length()-1; i++)
    {

        char rom = roman.charAt(i);
        switch(rom)
        {
            case 'M': 
            sum += 1000;
            break;

            case 'D': 
            sum += 500;
            break;

            case 'C':
            if(i < roman.length()-1)
            {
                char next = roman.charAt(i+1);
                if(next == 'M')
                {
                    sum += 900;
                    i++; 
                }
                if(next == 'D')
                {
                    sum +=400;
                    i++;
                }
                else
                {
                    sum += 100;
                }

            }
            else 
            {
                sum += 100;
            }
            break;

            case 'L':
            sum += 50;
            break;

            case 'X':
            if(i < roman.length()-1)
            {
                char next = roman.charAt(i+1);

                if(next == 'L')
                {
                    sum += 40;
                    i++;
                }
                if(next == 'C')
                {
                    sum += 90;
                    i++;
                }
                else
                {
                    sum += 10;
                }
            }
            else
            {
                sum += 10;
            }
            break;

            case 'V':
            if( i < roman.length()-1)
            {

                char next = roman.charAt(i+1); 

                if(next == 'I')
                {
                    sum += 6;
                    i++;
                }
                else
                {
                    sum += 5;
                }
            }

            else
            {
                sum += 5;
            }
            break;

            case 'I':
            if(i < roman.length()-1)
            {
                char next = roman.charAt(i+1);
                if(next == 'V')
                {
                    sum += 4;
                    i++;
                }
                if(next == 'X')
                {
                    sum += 9;
                    i++;
                }
                else 
                {
                    sum += 1;
                }
            }
            else 
            {
                sum += 1;
            }
            break;

            default: 
            System.out.println("I've encountered an issue with the characters you've entered.");

           }
          }
           return sum;
          }

1 个答案:

答案 0 :(得分:0)

看起来你错过了其他的东西。它并不是真正“斩断”第一个整数,但它可能看起来是这样的,因为sum += 1将被调用,而不应该 - 例如,将4变为5。

if (next == 'V') {
    sum += 4;
    i++;
} else if (next == 'X') {  // note the else here...
    sum += 9;
    i++;
} else {
    sum += 1;
}

其他案件也可能有同样的错误。