본문 바로가기
Programming Languages/Java

[Java Examples] 숫자를 로마 숫자로 바꾸기 예제 코드 및 설명

by Henry Cho 2024. 2. 14.

숫자를 로마 숫자로 바꾸기 예제 코드 및 설명

포스트 난이도: HOO_Junior


# Example Code

/**
 * This class converts a user-inputted number into its Roman numeral equivalent.
 * It prompts the user until a number within the range of 1 to 90 is entered.
 */
 import java.util.Scanner; // Import statement for java.util.Scanner
 
public class RomanNumeralConverter {
    
    // Variable to store the user's input
    private int number;
    
    /**
     * Main method that launches the program.
     * @param args Not used in this application.
     */
    public static void main(String[] args) {
        RomanNumeralConverter converter = new RomanNumeralConverter();
        converter.promptUser();
    }
    
    /**
     * Prompts the user for a number between 1 and 90.
     * If the input is outside the range, it asks again.
     */
    public void promptUser() {
        // Scanner object for capturing user input
        Scanner scanner = new Scanner(System.in);
        
        do {
            // Prompt the user for input
            System.out.print("Enter a number between 1 and 90: ");
            number = scanner.nextInt();
            
            // Check for valid range
            if (number < 1 || number > 90) {
                System.out.println("Invalid number. Please try again.");
            }
        } while (number < 1 || number > 90);
        
        // Convert and display the Roman numeral
        String romanNumeral = convertToRoman(number);
        System.out.println("The Roman numeral is: " + romanNumeral);
    }
    
    /**
     * Converts an integer to a Roman numeral.
     * @param num The number to convert.
     * @return The Roman numeral as a String.
     */
    public String convertToRoman(int num) {
        // Mapping of numbers to Roman numerals
        String[] romanNumerals = {"I", "IV", "V", "IX", "X", "XL", "L", "XC"};
        int[] values = {1, 4, 5, 9, 10, 40, 50, 90};
        
        // StringBuilder to construct the Roman numeral
        StringBuilder roman = new StringBuilder();
        
        // Construct the Roman numeral from the largest value down
        for (int i = values.length - 1; i >= 0; i--) {
            while (num >= values[i]) {
                num -= values[i];
                roman.append(romanNumerals[i]);
            }
        }
        
        return roman.toString();
    }
}

import java.util.Scanner; // Import statement for java.util.Scanner

/**
 * This class converts a user-inputted number into its Roman numeral equivalent.
 * It prompts the user until a valid number is entered or 'x' to exit.
 */
public class RomanNumeralConverter {

    /**
     * Main method that launches the program.
     * @param args Not used in this application.
     */
    public static void main(String[] args) {
        RomanNumeralConverter converter = new RomanNumeralConverter();
        converter.promptUser();
    }

    /**
     * Prompts the user for a number between 1 and 90 or 'x' to exit.
     * Repeats until the user chooses to exit.
     */
    public void promptUser() {
        Scanner scanner = new Scanner(System.in);
        String input;

        while (true) {
            System.out.print("Enter a number between 1 and 90 or 'x' to exit: ");
            input = scanner.next();

            if (input.equalsIgnoreCase("x")) {
                System.out.println("Exiting the program.");
                break;
            }

            try {
                int number = Integer.parseInt(input);

                if (number < 1 || number > 90) {
                    System.out.println("Invalid number. Please try again.");
                } else {
                    String romanNumeral = convertToRoman(number);
                    System.out.println("The Roman numeral is: " + romanNumeral);
                }
            } catch (NumberFormatException e) {
                System.out.println("Invalid input. Please enter a number or 'x' to exit.");
            }
        }

        scanner.close();
    }

    /**
     * Converts an integer to a Roman numeral.
     * @param num The number to convert.
     * @return The Roman numeral as a String.
     */
    public String convertToRoman(int num) {
        String[] romanNumerals = {"I", "IV", "V", "IX", "X", "XL", "L", "XC"};
        int[] values = {1, 4, 5, 9, 10, 40, 50, 90};

        StringBuilder roman = new StringBuilder();

        for (int i = values.length - 1; i >= 0; i--) {
            while (num >= values[i]) {
                num -= values[i];
                roman.append(romanNumerals[i]);
            }
        }

        return roman.toString();
    }
}

Figure 1. Result of example code


# Explanations

이번 포스트에서는 사용자가 숫자를 입력했을 때 로마 숫자로 바뀌어서 출력이 되도록 하는 예제코드이다. 이번 예제코드에서 각 조건문이나 반복문들이 어떤 식으로 사용되고 있는지를 살펴볼 수 있다. 특히 do while문을 사용해서 90보다 큰 숫자를 입력할 경우 로마 숫자로 변환할 수 있는 범위에서 벗어났다고 설정해 주어 사용자가 다시 숫자를 입력할 수 있게끔 만들어주는 부분을 통해 while문과 do while문의 차이를 살펴볼 수 있다. 또한 try를 비롯하여 for, if statement와 같이 다양한 조건문들이 사용되고 있기 때문에 각각의 조건문들을 비교하고 대체하여 사용이 가능한 것도 예제코드 1과 2를 통해서 비교해 볼 수 있다.

 

예제코드 1과 2의 코드 작성 자체에도 차이가 있지만 예제코드 2의 경우 사용자가 계속 입력할 수 있도록 while문을 추가로 사용하였으며 'x'를 입력하면 프로그램이 종료되게끔 설정되어 있다.

 


 

728x90

댓글