Java中从罗马数字到十进制的转换
我必须制作一个程序,将罗马数字转换成十进制。我对如何编写罗马数字的条件感到困惑,例如IV(4)、IX(9)、XL(40)和CM(900)。我写的代码适用于所有其他数字Java中从罗马数字到十进制的转换,java,netbeans,roman-numerals,Java,Netbeans,Roman Numerals,我必须制作一个程序,将罗马数字转换成十进制。我对如何编写罗马数字的条件感到困惑,例如IV(4)、IX(9)、XL(40)和CM(900)。我写的代码适用于所有其他数字 public static void main(String[] args) { System.out.print("Enter a roman numeral: "); Scanner in = new Scanner(System.in); String Roman = in.next();
public static void main(String[] args) {
System.out.print("Enter a roman numeral: ");
Scanner in = new Scanner(System.in);
String Roman = in.next();
int largo = Roman.length();
char Roman2[] = new char[largo];
int Roman3[] = new int[largo];
for (int i = 0; i < largo; i++) {
Roman2[i] = Roman.charAt(i);
}
for (int i = 0; i < largo; i++) {
if (Roman2[i] == 'I') {
Roman3[i] = 1;
} else if (Roman2[i] == 'V') {
Roman3[i] = 5;
} else if (Roman2[i] == 'X') {
Roman3[i] = 10;
} else if (Roman2[i] == 'L') {
Roman3[i] = 50;
} else if (Roman2[i] == 'C') {
Roman3[i] = 100;
} else if (Roman2[i] == 'M') {
Roman3[i] = 1000;
}
}
int total = 0;
for (int m = 0; m < Roman3.length; m++) {
total += Roman3[m];
}
System.out.println("The Roman is equal to " + total);
}
publicstaticvoidmain(字符串[]args){
System.out.print(“输入罗马数字:”);
扫描仪输入=新扫描仪(系统输入);
字符串Roman=in.next();
int-largo=Roman.length();
char Roman2[]=新字符[largo];
int Roman3[]=新int[largo];
for(int i=0;i
定义枚举,如下所示:
public enum RomanSymbol {
I(1), V(5), X(10), L(50), C(100), D(500), M(1000);
private final int value;
private RomanSymbol(final int value) {
this.value = value;
}
public int getValue() {
return this.value;
}
public int calculateIntEquivalent(final int lastArabicNumber, final int totalArabicResult) {
if (lastArabicNumber > this.value) {
return totalArabicResult - this.value;
} else {
return totalArabicResult + this.value;
}
}
}
并像使用romansomb.I.getValue()
一样使用它,它将返回1,对于其他值也是如此
因此,如果接受用户提供的字符,则可以获得如下值:
char symbol = 'I';//lets assume this is what user has entered.
RomanSymbol rSymbol = RomanSymbol.valueOf(String.valueOf(symbol));
int invalue = rSymbol.getValue();
如果你有像IV这样的字符串,那么你可以计算,比如:
int lastValue = rSymbol.calculateIntEquivalent(intValue, 0);
lastValue = rSymbol.calculateIntEquivalent(intValue, lastValue); //and so on
您可以检查上一个数字 例如,我添加了检测
IV
的条件:
if (Roman2[i]=='I'){
Roman3[i]=1;
} else if (Roman2[i]=='V'){
Roman3[i]=5;
if (i>0 && Roman2[i-1]=='I') { // check for IV
Roman3[i]=4;
Roman3[i-1]=0;
}
} else if (Roman2[i]=='X'){
Roman3[i]=10;
} else if (Roman2[i]=='L'){
Roman3[i]=50;
} else if (Roman2[i]=='C'){
Roman3[i]=100;
} else if (Roman2[i]=='M'){
Roman3[i]=1000;
}