java - 将罗马数字转换为十进制值错误
问题描述
下面我尝试编写一个程序将罗马数字转换为十进制值,但我似乎无法弄清楚为什么当我输入测试值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;
}
}
我确信有更简单的方法可以使用数组或其他东西来做到这一点,但是对于我目前正在学习的课程,我们不允许使用数组,我们必须使用基本的 Java 东西,比如方法和循环,但不是数组,因为我们还没有找到它们。
解决方案
您忘记valueOf()
在else
分支中调用:
...
} else {
total += valueOf(romanNum.charAt(1)) - valueOf(romanNum.charAt(0));
romanNum = romanNum.substring(2);
}
推荐阅读
- android - React Native 运行没有错误不会在设备上启动?
- javascript - 在没有 Jquery 的情况下对 mouseEnter 和 mouseLeave 做出反应停止/开始淡出
- linux - 从 Linux 服务器向 Google Cloud Platform 进行身份验证
- mysql - 如何在 mySQL 中查找最常见的字符串
- javascript - 为什么我的 div 没有更新它们的背景颜色?
- node.js - 在 lambdas/箭头函数中抛出没有大括号的错误
- python - 熊猫查询没有返回正确的DataFrame Python
- android - Socket/DataOutputStream/DataInputStream 可以打包吗?
- c++ - 使用 Rcpp 模块向 R 公开简单的 C++ Student 类
- python - argparse and custom Actions - code path not obvious