Ниже я попытался написать программу для преобразования римской цифры в десятичное значение, но я не могу понять, почему при вводе тестового значения MCMLXXVIII выводится 1088 вместо 1978 .Если бы кто-нибудь мог сказать мне, где я ошибся, это было бы очень полезно.
import java.util.Scanner;
public class RomanNumerals {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
int total = 0, strLength;
String romanNum;
System.out.print("Enter roman numeral to convert: ");
romanNum = console.next();
total = convertNum(romanNum);
System.out.println("The roman numeral converted is: " + total);
console.close();
}
public static int convertNum(String romanNum) {
int total = 0;
while (!romanNum.isEmpty()) {
if ((romanNum.length() == 1) || valueOf(romanNum.charAt(0)) >=
valueOf(romanNum.charAt(1))) {
total += valueOf(romanNum.charAt(0));
romanNum = romanNum.substring(1);
} else {
total += (romanNum.charAt(1)) - (romanNum.charAt(0));
romanNum = romanNum.substring(2);
}
}
return total;
}
/**
* Gives the value of the Roman numeral
*
* @param numeral a single Roman numeral
* @return the decimal value of numeral
*/
public static int valueOf(char numeral) {
if (numeral == 'I') {
return 1;
}
if (numeral == 'V') {
return 5;
}
if (numeral == 'X') {
return 10;
}
if (numeral == 'L') {
return 50;
}
if (numeral == 'C') {
return 100;
}
if (numeral == 'D') {
return 500;
}
// must be an M
return 1000;
}
}
Я уверен, что есть более простые способы сделать это, используя массив или что-то еще, но для класса IВ настоящее время я понимаю, что нам не разрешено использовать массивы, и мы должны использовать базовые Java-вещи, такие как методы и циклы, но не массивы, потому что мы еще не дошли до них.