You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现阿拉伯数字转罗马数字代码问题及修正方案

阿拉伯数字转罗马数字的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();
        
        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: " + 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", "", "");
        
        return romanThousands + romanHundreds + romanTens + romanOnes;
    }
}

修正说明

最初编写代码时遇到了两个问题,导致程序无法正常输出正确结果:

  • 遗漏了number /=10;语句:这会导致处理每一位数字时没有正确对原数进行移位,无法依次提取十位、百位和千位的数字进行转换
  • 原代码中输出逻辑有误:最初错误地输出了空的romanDigit变量,同时if语句的位置安排不合理,后来调整为直接调用convert()方法输出转换结果

修正这两个问题后,程序就可以正确处理0到3999范围内的数字转换了。

内容的提问来源于stack exchange,提问作者Miguel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:44:14