【发布时间】:2014-11-20 18:29:20
【问题描述】:
这是我将整数转换为罗马数字和将罗马数字转换为整数的课程。当我将一个数字说 85 放入 arabicToRoman 时,我得到正确的罗马数字,但我得到的整数总是少 5,所以 85 得到 80。当我使用 romanToArabic 时,我得到减去 5 的数字和罗马数字缺少最后一个字母。你能帮我找到问题的根源吗?一切都粘贴在下面(我在初中高中课程,要温柔)
public class RomanNumeral
{
private int arabic;
private String roman;
public RomanNumeral(String r)
{
roman = r.toUpperCase();
arabic = romanToArabic();
}
public RomanNumeral(int a)
{
arabic = a;
roman = arabicToRoman();
}
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':
char next = roman.charAt(i+1);
if(next == 'M')
{
sum += 900;
i++;
}
if( next == 'D')
{
sum += 400;
i++;
}
else
{
sum += 100;
}
break;
case 'L':
sum += 50;
break;
case 'X':
next = roman.charAt(i+1);
if(next == 'L')
{
sum += 40;
i++;
}
if(next == 'C')
{
sum += 90;
i++;
}
else
{
sum += 10;
}
break;
case 'V':
next = roman.charAt(i+1);
if(next == 'I')
{
sum += 6;
i++;
}
else
{
sum += 5;
}
break;
case 'I':
next = roman.charAt(i+1);
if(next == 'V')
{
sum += 4;
i++;
}
if(next == 'X')
{
sum += 9;
i++;
}
else
{
sum += 1;
}
break;
default:
System.out.println("I've encountered an issue with the characters you've entered.");
}
}
return sum;
}
public String arabicToRoman()
{
int temp = arabic;
String hud = "";
while(temp >= 1000)
{
hud += "M";
temp -= 1000;
}
while(temp >= 900)
{
hud += "CM";
temp -= 900;
}
while( temp >= 500)
{
hud += "D";
temp -= 500;
}
while( temp >= 400)
{
hud += "CD";
temp -= 400;
}
while(temp >= 100)
{
hud += "C";
temp -= 100;
}
while(temp>= 90)
{
hud += "XC";
temp -= 90;
}
while(temp >= 50)
{
hud += "L";
temp -= 50;
}
while( temp >= 40)
{
hud += "XL";
temp -= 40;
}
while (temp >= 10)
{
hud += "X";
temp -= 10;
}
while( temp >= 9)
{
hud += "IX";
temp -= 9;
}
while(temp >= 6)
{
hud += "VI";
temp -= 6;
}
while (temp >= 5)
{
hud += "V";
temp -= 5;
}
while (temp >= 4)
{
hud += "IV";
temp -= 4;
}
while (temp >= 1)
{
hud += "I";
temp -= 1;
}
return hud;
}
public String toString()
{
String hud = arabicToRoman();
int sum = romanToArabic();
return "The roman numeral equivalent of the number " + sum + " " + "is " + hud;
}
}
【问题讨论】:
标签: bluej