我有这种方法应该将罗马数字转换成整数,但是当我输入罗马数字时它会切掉第一个字母,所以当我输入“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;
}
答案 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;
}
其他案件也可能有同样的错误。