Java 罗马数字到整数

Java 罗马数字到整数,java,Java,我正试图找到最简单的算法来将罗马数字转换为int。我从Rosetta代码中得到了这段代码,但代码中几乎没有什么东西是没有意义的 在下面代码的for循环中,罗马数字是如何迭代的?你能解释一下这里嵌套的for循环是如何工作的吗?或者你有没有更简单的方法来编写这个算法 public class Roman { enum Numeral { I(1), IV(4), V(5), IX(9), X(10), XL(40), L(50), XC(90), C(100), CD(40

我正试图找到最简单的算法来将罗马数字转换为int。我从Rosetta代码中得到了这段代码,但代码中几乎没有什么东西是没有意义的

在下面代码的for循环中,罗马数字是如何迭代的?你能解释一下这里嵌套的for循环是如何工作的吗?或者你有没有更简单的方法来编写这个算法

public class Roman {

    enum Numeral {
        I(1), IV(4), V(5), IX(9), X(10), XL(40), L(50), XC(90), C(100), CD(400), D(500), CM(900), M(1000);
        int weight;

        Numeral(int weight) {
            this.weight = weight;
        }
    };

    public static String roman(long n) {

        if( n <= 0) {
            throw new IllegalArgumentException();
        }

        StringBuilder buf = new StringBuilder();

        final Numeral[] values = Numeral.values();
        for (int i = values.length - 1; i >= 0; i--) {
            while (n >= values[i].weight) {
                buf.append(values[i]);
                n -= values[i].weight;
            }
        }
        return buf.toString();
    }

    public static void test(long n) {
        System.out.println(n + " = " + roman(n));
    }

    public static void main(String[] args) {
        test(1999);
        test(25);
        test(944);
        test(0);
    }
公共类{
枚举数{
I(1)、IV(4)、V(5)、IX(9)、X(10)、XL(40)、L(50)、XC(90)、C(100)、CD(400)、D(500)、CM(900)、M(1000);
整数权重;
数字(整数重量){
重量=重量;
}
};
公共静态字符串罗马(长n){
如果(n=0;i--){
而(n>=值[i]。重量){
buf.追加(值[i]);
n-=值[i]。重量;
}
}
返回buf.toString();
}
公共静态空隙试验(长n){
System.out.println(n+“=”+roman(n));
}
公共静态void main(字符串[]args){
测试(1999年);
测试(25);
测试(944);
试验(0);
}

罗马文字从最高到最低进行迭代。这很有意义。这是一个应该怎么做的方法,因为你想先提取最大的项目。一旦完成,你想提取第二大的项目,依此类推。提取项目时,它可能适合你当前拥有的数字的0,1,2,3,…倍左。这就是这个循环的意义/目的

        while (n >= values[i].weight) {
            buf.append(values[i]);
            n -= values[i].weight;
        }
我认为这是编写这个算法最简单的方法。你只需要掌握这个想法。

public int romanToInt(String s){
public int romanToInt(String s) {
        int total = 0, currentVal = 0, prevVal = 0;

        for(int i=s.length()-1; i>=0; i--) {
            switch(s.charAt(i)) {
                case 'I' : currentVal = 1; break;
                case 'V' : currentVal = 5; break;
                case 'X' : currentVal = 10; break;
                case 'L' : currentVal = 50; break; 
                case 'C' : currentVal = 100; break;
                case 'D' : currentVal = 500; break;
                case 'M' : currentVal = 1000; break; 
                default: break;
            }
            total += (currentVal < prevVal) ? -1 * currentVal : currentVal;
            prevVal = currentVal;
        }

        return total;
    }
int total=0,currentVal=0,prevVal=0; 对于(int i=s.length()-1;i>=0;i--){ 开关(s.charAt(i)){ 案例“I”:currentVal=1;中断; 案例“V”:currentVal=5;中断; 案例“X”:currentVal=10;中断; 案例“L”:currentVal=50;中断; 案例“C”:currentVal=100;中断; 案例“D”:currentVal=500;中断; 案例“M”:currentVal=1000;中断; 默认:中断; } 总计+=(currentVal
权重变量指的是什么?它指的是每个罗马文字/数字的值,例如,对于IV,权重为4。除非您将问题的措辞向后,否则此枚举用于将整数转换为罗马数字,而不是将罗马数字转换为整数。可能重复