下面是一个 Java 程序,可以读取用户输入的字符串,将其转换为罗马数字并打印出来。请注意,此程序假设输入的字符串仅包含数字,否则它可能会引发异常。
import java.util.Scanner; public class RomanNumeralConverter { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个长度小于等于9的数字字符串:"); String input = scanner.nextLine(); if (input.length() > 9) { System.out.println("输入的字符串长度太长!"); return; } try { int num = Integer.parseInt(input); if (num <= 0 || num >= 4000) { System.out.println("输入的数字必须在1和3999之间!"); return; } String romanNumeral = convertToRomanNumeral(num); System.out.println(input + " 转换为罗马数字为:" + romanNumeral); } catch (NumberFormatException e) { System.out.println("输入的字符串不是有效的数字!"); return; } } public static String convertToRomanNumeral(int num) { String[] romanNumerals = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; StringBuilder romanNumeral = new StringBuilder(); for (int i = 0; i < values.length; i++) { while (num >= values[i]) { num -= values[i]; romanNumeral.append(romanNumerals[i]); } } return romanNumeral.toString(); } }
该程序使用 Scanner 类从用户读取输入的字符串。它首先检查输入的字符串长度是否小于等于 9,并确保输入的字符串是有效的数字。然后,它调用 convertToRomanNumeral 方法将数字转换为罗马数字。该方法采用两个数组,一个包含罗马数字,另一个包含对应的数字值。然后它使用一个循环来构建罗马数字字符串,直到输入的数字被完全转换为罗马数字为止。最后,该程序将转换后的罗马数字字符串打印出来。
Scanner
convertToRomanNumeral
如果您想了解更多关于该程序的细节,可以看下面的代码注释:
import java.util.Scanner; public class RomanNumeralConverter { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个长度小于等于9的数字字符串:"); String input = scanner.nextLine(); // 检查输入的字符串长度是否小于等于 9 if (input.length() > 9) { System.out.println("输入的字符串长度太长!"); return; } try { // 将输入的字符串转换为整数 int num = Integer.parseInt(input); // 检查输入的数字是否在有效范围内 if (num <= 0 || num >= 4000) { System.out.println("输入的数字必须在1和3999之间!"); return; } // 调用 convertToRomanNumeral 方法将数字转换为罗马数字 String romanNumeral = convertToRomanNumeral(num); // 打印转换后的罗马数字字符串 System.out.println(input + " 转换为罗马数字为:" + romanNumeral); } catch (NumberFormatException e) { System.out.println("输入的字符串不是有效的数字!"); return; } } // 将整数转换为罗马数字 public static String convertToRomanNumeral(int num) { // 定义罗马数字和对应数字值的数组 String[] romanNumerals = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; // 定义一个 StringBuilder 对象来构建罗马数字字符串 StringBuilder romanNumeral = new StringBuilder(); // 从大到小遍历罗马数字数组 for (int i = 0; i < values.length; i++) { // 如果输入的数字大于或等于当前罗马数字对应的数字值 while (num >= values[i]) { // 将当前罗马数字添加到字符串中 romanNumeral.append(romanNumerals[i]); // 减去当前罗马数字对应的数字值 num -= values[i]; } } // 将 StringBuilder 对象转换为字符串并返回 return romanNumeral.toString(); } }
在 main 方法中,我们首先创建了一个 Scanner 对象来读取用户输入的字符串。然后我们通过调用 scanner.nextLine() 方法从用户读取字符串。
main
scanner.nextLine()
接下来,我们检查输入的字符串长度是否小于等于 9。如果长度大于 9,我们打印一条错误消息并返回。如果字符串长度在有效范围内,我们尝试将其转换为整数。如果无法将字符串转换为整数,我们打印一条错误消息并返回。
如果成功将字符串转换为整数,我们检查
输入的数字是否在有效范围内。如果数字小于等于0或大于等于4000,我们打印一条错误消息并返回。否则,我们调用 convertToRomanNumeral 方法将数字转换为罗马数字。
在 convertToRomanNumeral 方法中,我们首先定义了一个包含罗马数字和对应数字值的数组。然后,我们创建了一个 StringBuilder 对象来构建罗马数字字符串。
StringBuilder
我们从大到小遍历罗马数字数组,并检查输入的数字是否大于或等于当前罗马数字对应的数字值。如果是,我们将当前罗马数字添加到字符串中,并从输入的数字中减去当前罗马数字对应的数字值。我们重复这个过程直到输入的数字小于当前罗马数字对应的数字值。
最后,我们将 StringBuilder 对象转换为字符串并返回。
在本例中,我们使用了两个方法来实现程序。这样可以使程序更加模块化和易于阅读。 main 方法处理用户输入和程序的主要控制流程,而 convertToRomanNumeral 方法将数字转换为罗马数字。
原文链接:codingdict.net