java - 将罗马数字转换为十进制值错误

标签 java methods numbers java.util.scanner roman-numerals

下面我尝试编写一个程序将罗马数字转换为十进制值,但我似乎无法弄清楚为什么当我输入测试值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;
    }
}

我确信有更简单的方法可以使用数组或其他东西来做到这一点,但是对于我当前正在学习的类(class),我们不允许使用数组,我们必须使用基本的 Java 东西,例如方法和循环,但不是数组,因为我们还没有接触到它们。

最佳答案

您忘记在 else 分支中调用 valueOf():

...

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

关于java - 将罗马数字转换为十进制值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52971081/

相关文章:

java - Java RMI 远程对象可以在次要回收中进行垃圾回收吗?

java - 使用 testNG 并行化测试时,类中的测试不会在同一线程中执行

jquery - 使用 Filter 方法未获取所需元素

ruby - 什么是带上下文的 Ruby 方法定义?

java - 逐行打印数字的递归方法

java - 使用Gson解析异常Json

java - 无法使用 cdi : NullPointerException 注入(inject) bean

c++ - 如何为类的每个实例创建实例特定方法?

numbers - 计算算术 - 8 位数字需要多少位

ios - Swift 2.0 格式 100 0's into a friendly K' s