Преобразовать римские цифры в десятичное значение ошибки - PullRequest
0 голосов
/ 24 октября 2018

Ниже я попытался написать программу для преобразования римской цифры в десятичное значение, но я не могу понять, почему при вводе тестового значения 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-вещи, такие как методы и циклы, но не массивы, потому что мы еще не дошли до них.

1 Ответ

0 голосов
/ 24 октября 2018

Вы забыли позвонить valueOf() в ветку else:

...

} else {
    total += valueOf(romanNum.charAt(1)) - valueOf(romanNum.charAt(0));
    romanNum = romanNum.substring(2);
}
...