Java-转换罗马数字

Java-转换罗马数字,java,Java,我想把罗马数字转换成阿拉伯数字。我获取一个字符串并运行一个循环,检查每个字符的值。所以‘M’会返回1000等,用罗马数字表示,如果一个数字比下一个小,那么你需要减去它。所以“XL”或“1050”等于40。这就是为什么我在for循环中有一个if语句,在这里我检查下一个字符并返回它的值。稍后我会做算术运算,但现在我只是尝试返回值 我的问题是,它总是返回最后一个字符值两次。无论我输入2个字符还是10个字符。if语句清楚地检查了长度-1,因此它应该在到达最后一个字符时结束检查。我尝试过调试它,但在最后一

我想把罗马数字转换成阿拉伯数字。我获取一个字符串并运行一个循环,检查每个字符的值。所以‘M’会返回1000等,用罗马数字表示,如果一个数字比下一个小,那么你需要减去它。所以“XL”或“1050”等于40。这就是为什么我在for循环中有一个if语句,在这里我检查下一个字符并返回它的值。稍后我会做算术运算,但现在我只是尝试返回值

我的问题是,它总是返回最后一个字符值两次。无论我输入2个字符还是10个字符。if语句清楚地检查了长度-1,因此它应该在到达最后一个字符时结束检查。我尝试过调试它,但在最后一轮调试结束时,一切看起来都很好,出于某种原因,程序会打印最后一个值两次。你能找出我做错了什么吗

我可以看到以前有人问过关于罗马数字的问题,但是我以前没有在这里讨论过这个问题

public class RomanNumerals{
    static int value(char a) {
        if (a=='m') return 1000;
        else if (a=='d') return 500;
        else if (a=='c') return 100;
        else if (a=='l') return 50;
        else if (a=='x') return 10;
        else if (a=='v') return 5;
        else if (a=='i') return 1;
        else return 0;
    }

    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        System.out.print("Enter Roman numerals: ");
        String roman=in.nextLine();
        roman=roman.toLowerCase();
        int val=0;
        int val_next=0;

        for (int i=0;i<roman.length();i++) {
            val=value(roman.charAt(i));
            if (i<roman.length()-1) {
                val_next=value(roman.charAt(i+1));
            }
            System.out.println(val + "\t" + val_next);
        }
    }
}
编辑:我已经完成了。如果有人需要完整的代码,请参阅: 这是你的问题:

    for (int i=0;i<roman.length();i++) {
        val=value(roman.charAt(i));
        if (i<roman.length()-1) {
            val_next=value(roman.charAt(i+1)); //<--
        }
        System.out.println(val + "\t" + val_next);
    }
我想,您需要将其重置为0才能进行计算

    for (int i = 0; i < roman.length(); i++) {
        val = value(roman.charAt(i));
        if (i < roman.length() - 1) {
            val_next = value(roman.charAt(i + 1));
        } else {
            val_next = 0;
        }
        System.out.println(val + "\t" + val_next);
    }

既然您已经说过现在只需要这些值,我将把实际的算术留给您:D

您正在重新检查元素。因此,根据您编写for循环的方式,您必须在循环内再次递增或递减

class Solution {
 public int romanToInt(String s) {
    int x=0;
    for(int i=s.length()-1;i>=0;i--){
        if(i!=0&& returnNumber(s.charAt(i))>returnNumber(s.charAt(i-1))){
            x=x+returnNumber(s.charAt(i))-returnNumber(s.charAt(i-1));
            i--;
        }
        else{
            x=x+returnNumber(s.charAt(i));
        }
    } return x;

}
public int returnNumber(char s){
    switch(s){
        case 'I': return 1;

        case 'V': return 5;

        case 'X': return 10;

        case 'L': return 50;

        case 'C': return 100;

        case 'D': return 500;

        case 'M': return 1000;

    }
    return 0;
}
}

可能的副本我已经检查过了,但它没有回答我的问题谢谢!我很沮丧,因为我自己看不到这一点,但我感谢你的时间和帮助。它工作得很好。
    for (int i=0;i<roman.length();i++) {
        val=value(roman.charAt(i));
        if (i<roman.length()-1) {
            val_next=value(roman.charAt(i+1)); //<--
        }
        System.out.println(val + "\t" + val_next);
    }
    for (int i=0;i<roman.length();i++) {
        val=value(roman.charAt(i));
        if (i<roman.length()-1) {
            val_next=value(roman.charAt(i+1)); //<--
        }
        System.out.println(val + "\t" + val_next);
    }
    for (int i = 0; i < roman.length(); i++) {
        val = value(roman.charAt(i));
        if (i < roman.length() - 1) {
            val_next = value(roman.charAt(i + 1));
        } else {
            val_next = 0;
        }
        System.out.println(val + "\t" + val_next);
    }
Enter Roman numerals: MCD
1000    100
100     500
500     0
class Solution {
 public int romanToInt(String s) {
    int x=0;
    for(int i=s.length()-1;i>=0;i--){
        if(i!=0&& returnNumber(s.charAt(i))>returnNumber(s.charAt(i-1))){
            x=x+returnNumber(s.charAt(i))-returnNumber(s.charAt(i-1));
            i--;
        }
        else{
            x=x+returnNumber(s.charAt(i));
        }
    } return x;

}
public int returnNumber(char s){
    switch(s){
        case 'I': return 1;

        case 'V': return 5;

        case 'X': return 10;

        case 'L': return 50;

        case 'C': return 100;

        case 'D': return 500;

        case 'M': return 1000;

    }
    return 0;
}
}