HOWTO · Java

Java のローマ数字

このチュートリアルでは、Java で整数をローマ数字に変換する方法を示します。

このチュートリアルでは、Java で整数をローマ数字に変換する方法を示します。

Java のローマ数字

Java での作業中には、整数をローマ数字に変換することが頻繁に必要になります。 ほとんどの場合、この質問はトップ IT 企業との面接で尋ねられます。

ローマ数字は数字の文字表現です。 これらの数値は通常、時計や音楽理論で見つけることができます。 ローマ字で数字を表すために使用される文字は全部で 7 文字あります。 次の表を参照してください。

ローマン 数字
1
4
5
IX 9
バツ 10
XL 40
L 50
XC 90
100
CD 400
D 500
CM 900
M 1000

ローマ数字は通常、左から右へ、上から下へと書かれます。 上の表は、ローマ数字を 3 回以上使用できないことを示しています。 たとえば、IV のように 4 を書きますが、IIII は書きません。

それでは、Java で整数をローマ数字に変換する方法を作成してみましょう。 以下の手順に従います。

  • まず、ローマ数字用と整数用の 2つの配列を作成する必要があります。
  • 次に、文字列ビルダー クラスのインスタンスを作成します。
  • 次のステップは、整数をローマ数字と比較することです。
  • 整数が >= の場合は最大のローマ数字であり、それを文字列ビルダー インスタンスに追加し、入力数値からその値を減らす必要があります。
  • 整数が < の場合は最大のローマ数字であり、最大のローマ数字をチェックして、入力数値が 0 になるまでプロセスを繰り返す必要があります。
  • 最終的な文字列ビルダーは、変換されたローマ数字になります。

上記の手順に基づいて Java プログラムを実装してみましょう。

package delftstack;

public class Example {
  public static void IntegerToRoman(int DemoInteger) {
    System.out.println("The Integer Number is : " + DemoInteger);
    int[] IntegerValues = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
    String[] RomanValues = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
    StringBuilder RomanNumber = new StringBuilder();
    for (int x = 0; x < IntegerValues.length; x++) {
      while (DemoInteger >= IntegerValues[x]) {
        DemoInteger = DemoInteger - IntegerValues[x];
        RomanNumber.append(RomanValues[x]);
      }
    }
    System.out.println("The Roman Numeral for given number is: " + RomanNumber.toString());
  }
  public static void main(String args[]) {
    IntegerToRoman(121);
    IntegerToRoman(280);
    IntegerToRoman(999);
    IntegerToRoman(1000);
    IntegerToRoman(1100);
  }
}

上記のコードは、指定された整数をローマ数字に変換します。 出力を参照してください。

The Integer Number is : 121
The Roman Numeral for given number is: CXXI
The Integer Number is : 280
The Roman Numeral for given number is: CCLXXX
The Integer Number is : 999
The Roman Numeral for given number is: CMXCIX
The Integer Number is : 1000
The Roman Numeral for given number is: M
The Integer Number is : 1100
The Roman Numeral for given number is: MC

整数をローマ数字に変換する方法はこれだけではありません。 2つではなく 4つの配列を作成することもできます。 これらの 4つの配列は、10、100、1000 の単位のローマ数字用です。 次に、これらの配列を使用して、同じ文字列ビルダー メソッドを使用して、指定された数値のローマ数字を生成できます。例を参照してください。

package delftstack;

public class Example {
  public static String IntegerToRoman(int DemoIntger) {
    String[] ThousandsRoman = {"", "M", "MM", "MMM"};
    String[] HundredsRoman = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
    String[] TensRoman = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
    String[] UnitsRoman = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
    return ThousandsRoman[DemoIntger / 1000] + HundredsRoman[(DemoIntger % 1000) / 100]
        + TensRoman[(DemoIntger % 100) / 10] + UnitsRoman[DemoIntger % 10];
  }
  public static void main(String args[]) {
    int[] Integers = {
        17, 23, 48, 53, 181, 191, 147, 150, 105, 128, 199, 98, 212, 2181, 3118, 1100, 1111};
    for (int DemoInteger : Integers) {
      System.out.printf("Integer %4d -> Roman %8s\n", DemoInteger, IntegerToRoman(DemoInteger));
    }
  }
}

上記のコードは、指定された整数の配列をローマ数字に 1つずつ変換します。 出力を参照してください:

Integer   17 -> Roman     XVII
Integer   23 -> Roman    XXIII
Integer   48 -> Roman   XLVIII
Integer   53 -> Roman     LIII
Integer  181 -> Roman   CLXXXI
Integer  191 -> Roman     CXCI
Integer  147 -> Roman   CXLVII
Integer  150 -> Roman       CL
Integer  105 -> Roman       CV
Integer  128 -> Roman  CXXVIII
Integer  199 -> Roman    CXCIX
Integer   98 -> Roman   XCVIII
Integer  212 -> Roman    CCXII
Integer 2181 -> Roman MMCLXXXI
Integer 3118 -> Roman MMMCXVIII
Integer 1100 -> Roman       MC
Integer 1111 -> Roman     MCXI

コードで配列を使用したくない場合は、Maps を使用することもできます。ここでは、各整数の値をその数字とともに配置し、それを使用して整数をローマ数字に変換します。 例を参照してください。

package delftstack;

import java.util.LinkedHashMap;
import java.util.Map;
public class Example {
  public static String ConvertedRomanNumerals(int DemoInteger) {
    LinkedHashMap<String, Integer> RomanNumeralsMap = new LinkedHashMap<String, Integer>();

    RomanNumeralsMap.put("M", 1000);
    RomanNumeralsMap.put("CM", 900);
    RomanNumeralsMap.put("D", 500);
    RomanNumeralsMap.put("CD", 400);
    RomanNumeralsMap.put("C", 100);
    RomanNumeralsMap.put("XC", 90);
    RomanNumeralsMap.put("L", 50);
    RomanNumeralsMap.put("XL", 40);
    RomanNumeralsMap.put("X", 10);
    RomanNumeralsMap.put("IX", 9);
    RomanNumeralsMap.put("V", 5);
    RomanNumeralsMap.put("IV", 4);
    RomanNumeralsMap.put("I", 1);

    String RomanResult = "";

    for (Map.Entry<String, Integer> MapEntry : RomanNumeralsMap.entrySet()) {
      int MatchedInteger = DemoInteger / MapEntry.getValue();
      RomanResult = RomanResult + RepeatProcess(MapEntry.getKey(), MatchedInteger);
      DemoInteger = DemoInteger % MapEntry.getValue();
    }
    return RomanResult;
  }
  public static String RepeatProcess(String Roman, int DemoInteger) {
    if (Roman == null) {
      return null;
    }
    final StringBuilder DemoRomanBuilder = new StringBuilder();
    for (int i = 0; i < DemoInteger; i++) {
      DemoRomanBuilder.append(Roman);
    }
    return DemoRomanBuilder.toString();
  }

  public static void main(String args[]) {
    for (int x = 1; x < 31; x++) {
      System.out.println("Integer = " + x + " -> Roman = " + ConvertedRomanNumerals(x));
    }
  }
}

上記のコードは、Map を使用して整数をローマ数字に変換します。 このコードは、1 から 30 までの整数をローマ数字に変換します。 出力を参照してください:

Integer = 1 -> Roman = I
Integer = 2 -> Roman = II
Integer = 3 -> Roman = III
Integer = 4 -> Roman = IV
Integer = 5 -> Roman = V
Integer = 6 -> Roman = VI
Integer = 7 -> Roman = VII
Integer = 8 -> Roman = VIII
Integer = 9 -> Roman = IX
Integer = 10 -> Roman = X
Integer = 11 -> Roman = XI
Integer = 12 -> Roman = XII
Integer = 13 -> Roman = XIII
Integer = 14 -> Roman = XIV
Integer = 15 -> Roman = XV
Integer = 16 -> Roman = XVI
Integer = 17 -> Roman = XVII
Integer = 18 -> Roman = XVIII
Integer = 19 -> Roman = XIX
Integer = 20 -> Roman = XX
Integer = 21 -> Roman = XXI
Integer = 22 -> Roman = XXII
Integer = 23 -> Roman = XXIII
Integer = 24 -> Roman = XXIV
Integer = 25 -> Roman = XXV
Integer = 26 -> Roman = XXVI
Integer = 27 -> Roman = XXVII
Integer = 28 -> Roman = XXVIII
Integer = 29 -> Roman = XXIX