Перевод арабских цифр в римские

Имеется задача конвертировать арабские цифры в римские. Хотел сделать через методы, но в итоге арабским цифрам присваиваются некорректные значения римских.

Пример:

Ввод : 10
Вывод :XC

Не могу понять, откуда подтягивается C, если количество соток = 0.

import java.util.Scanner;

public class Main{
    
    public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        int units = x%10;
        int tens = (x%100)/10;
        int hundreds = (x%1000)/100;
        
        System.out.println(Hundreds(hundreds) + Tens(tens) + Units(units));
    }
    public static String Units(int units) {
          String s_units="";  
          switch (units) {    
            case 1: s_units = "I";    
            case 2: s_units = "II";   
            case 3: s_units = "III";  
            case 4: s_units = "IV";  
            case 5: s_units = "V";   
            case 6: s_units = "VI";   
            case 7: s_units = "VII";  
            case 8: s_units = "VIII"; 
            case 9: s_units = "IX";      
          }
          return s_units;
        }
        public static String Tens(int tens) {
          String s_tens="";  
          switch (tens) {   
            case 1: s_tens = "X";     
            case 2: s_tens = "XX";   
            case 3: s_tens = "XXX";   
            case 4: s_tens = "XL";   
            case 5: s_tens = "L";    
            case 6: s_tens = "LX";  
            case 7: s_tens = "LXX";
            case 8: s_tens = "LXXX"; 
            case 9: s_tens = "XC";    
          }
          return s_tens;
        }
        public static String Hundreds(int hundreds) {
          String s_hundreds="";  
          switch (hundreds) {    
            case 1: s_hundreds = "C";    
          }
          return s_hundreds;
        }
}

Ответы (2 шт):

Автор решения: tym32167

Чето как то у вас всё сложно больно. Я бы попробовал по другому решить. Я бы просто отнимал из числа римские значения, пока число в 0 не превратилось.

Ну вот пример на C#, но на java там почти тож самое будет

public string IntToRoman(int num)
{
    var keys = new string[] { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
    var vals = new int[] { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };

    StringBuilder ret = new StringBuilder();
    int ind = 0;
    
    while(ind < keys.Length)
    {
        while(num >= vals[ind])
        {               
            var d = num / vals[ind];
            num = num % vals[ind];              
            for(int i=0; i<d; i++)
                ret.Append(keys[ind]);
        }           
        ind++;          
    }

    return ret.ToString();
}

Проверка

Console.WriteLine(IntToRoman(28));
Console.WriteLine(IntToRoman(128));
Console.WriteLine(IntToRoman(628));
Console.WriteLine(IntToRoman(1628));

Вывод

XXVIII
CXXVIII
DCXXVIII
MDCXXVIII
→ Ссылка
Автор решения: tym32167

Вы в своих case забыли break вставить, потому у вас выбирается последнее выражение

case 9: s_tens = "XC";

на любое число в диапазоне 1-9

я бы в вашем коде заменил все

case 1: s_tens = "X";

на

case 1: return "X";

→ Ссылка