在 Java 中将小数转换为罗马数字?

Converting Decimal to Roman Numeral in Java?

我是计算机科学的新手,我知道我现在很可能会犯非常简单的错误。我正在制作一个将数字转换为罗马数字的程序,但我的 'Previous' 变量无法正常工作。

编辑澄清: 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;    
    }
}

这只是一个简单的逻辑错误。

如果我们运行通过示例输入 IX 逐步通过您的代码,我们可以看到读入的第一个字符是 I,这导致值Decimal 加 1。然后,当我们读入 X 时,我们从 Decimal 中减去 1,使其为零。

这意味着程序对输入IX输出0。

我们应该重新考虑这个程序 运行s.

这是更正的代码:

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;

    }
}

当上一个字符出现时,您没有很好地考虑到行为,您不仅要打折上一个添加的字符,而且要打折下一个字符中的相同数字,因此需要打折两次。