我对计算机科学非常陌生,我知道我现在很可能会犯非常简单的错误。我正在编写一个程序将数字转换为罗马数字,但我的“上一个”变量不起作用。
编辑以澄清: V 后面的每个数字组合(X、L、C、D、M、)均位于标记上方。另外,我的输出将输入视为相同的向前和向后。例如:(IV=6)
这是我的代码:
import java.util.*;
public class roman
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.print("Enter a Roman numeral: ");
String R = in.nextLine();
System.out.println("Converted to Decimal: " + RomanToDecimal(R));
}
static int RomanToDecimal(String R)
{
int Decimal = 0;
char Previous;
for (int x = 0; x < R.length(); x++)
{
Previous = R.charAt(x);
if(R.charAt(x) == 'I')
Decimal += 1;
if(R.charAt(x) == 'V')
{
if (Previous == 'I')
Decimal -= 1;
else
Decimal += 5;
}
if(R.charAt(x) == 'X')
{
if (Previous == 'I')
Decimal-= 1;
else
Decimal+= 10;
}
if(R.charAt(x) == 'L')
{
if (Previous == 'X')
Decimal -= 10;
else
Decimal+=50;
}
if(R.charAt(x) == 'C')
{
if (Previous == 'X')
Decimal -= 10;
else
Decimal += 100;
}
if(R.charAt(x) == 'D')
{
if (Previous == 'C')
Decimal -= 100;
else
Decimal += 500;
}
if(R.charAt(x) == 'M')
{
if (Previous == 'C')
Decimal -= 100;
else
Decimal+= 1000;
}
Previous = R.charAt(x);
}
return Decimal;
}
}
最佳答案
这是更正后的代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Enter a Roman numeral: ");
String R = in.nextLine();
System.out.println("Converted to Decimal: " + RomanToDecimal(R));
}
static int RomanToDecimal(String R) {
int Decimal = 0;
char Previous = 0;
for (int x = 0; x < R.length(); x++) {
if (R.charAt(x) == 'I')
Decimal += 1;
if (R.charAt(x) == 'V') {
System.out.println(Previous);
if (Previous == 'I') {
Decimal -= 2;
}
Decimal += 5;
}
if (R.charAt(x) == 'X') {
if (Previous == 'I') {
Decimal -= 2;
}
Decimal += 10;
}
if (R.charAt(x) == 'L') {
if (Previous == 'X') {
Decimal -= 20;
}
Decimal += 50;
}
if (R.charAt(x) == 'C') {
if (Previous == 'X') {
Decimal -= 20;
}
Decimal += 100;
}
if (R.charAt(x) == 'D') {
if (Previous == 'C') {
Decimal -= 200;
}
Decimal += 500;
}
if (R.charAt(x) == 'M') {
if (Previous == 'C') {
Decimal -= 200;
}
Decimal += 1000;
}
Previous = R.charAt(x);
}
return Decimal;
}
}
您没有很好地估计上一个字符出现时的行为,您不仅想对先前添加的字符打折,而且还想对下一个字符的相同数字打折,因此需要打折两次。
关于java - 在Java中将十进制转换为罗马数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36682750/