java将阿拉伯数字转换为罗马数字

时间:2018-01-20 13:59:06

标签: java

我正在为一个java类编写这个程序。该程序的目的是将阿拉伯数字输入转换为罗马数字。

这是我的代码:

import java.util.Scanner;

public class RomanDigit{
public static void main(String arg []){
    System.out.println("Please enter a number to be converted to roman numerals: ");
    Scanner scan = new Scanner (System.in);
    int number = scan.nextInt();
    String romanDigit = "";
    if (number < 0 || number > 3999) {
        System.out.println( "This number cannot be converted");
    }
    else
    {
        System.out.println("The number you input, converted into roman numerals is: " + romanDigit);
        System.out.println(convert(number));
    }
}



    public static String romanDigit(int n, String one, String five, String ten){

    if(n >= 1)
    {
        if(n == 1)
        {
            return one;
        }
        else if (n == 2)
        {
            return one + one;
        }
        else if (n == 3)
        {
            return one + one + one;
        }
        else if (n==4)
        {
            return one + five;
        }
        else if (n == 5)
        {
            return five;
        }
        else if (n == 6)
        {
            return five + one;
        }
        else if (n == 7)
        {
            return five + one + one;
        }
        else if (n == 8)
        {
            return five + one + one + one;
        }
        else if (n == 9)
        {
            return one + ten;
        }

    }
    return "";
}

public static String convert(int number){

    String romanOnes = romanDigit( number%10, "I", "V", "X");
    number /=10;
    String romanTens = romanDigit( number%10, "X", "L", "C");
    number /=10;
    String romanHundreds = romanDigit(number%10, "C", "D", "M");
    number /=10;
    String romanThousands = romanDigit(number%10, "M", "", "");

    String result = romanThousands + romanHundreds + romanTens + romanOnes;
    return result;

}
}

我现在为给定的建议编辑了代码。我注意到我错过了数字/ = 10;声明到底。由于某种原因,我之前删除它,忘了把它放回去。现在似乎工作正常。它除了数字/ = 10语句之外没有工作的原因是我在错误的地方使用了If语句。

1 个答案:

答案 0 :(得分:2)

您应该将convert方法更改为此类似的方法。

public static String convert(int number) {
    if (number < 0 || number > 3999) {
        return "This number cannot be converted";
    }

    String romanOnes = romanDigit(number % 10, "I", "V", "X");
    number /= 10;

    String romanTens = romanDigit(number % 10, "X", "L", "C");
    number /= 10;

    String romanHundreds = romanDigit(number % 10, "C", "D", "M");
    number /= 10;

    String romanThousands = romanDigit(number % 10, "M", "", "");
    number /= 10;

    String result = romanThousands + romanHundreds + romanTens + romanOnes;
    return result;
}

此外,您应该从romanDigit方法中删除检查是大于零且小于4000的数字。

正如@eis注意到的那样,检查确实一个数字对于您应该在convert方法之外检查的转换有效。在这种情况下,在main方法中。