Нужна помощь в написании конвертера чисел в римскую цифру, используя только if, если еще и операторы switch

Вот код:

public String ToRoman(int number)
{

    if ((number < 1 || (number > 3999)))

        if (number >= 1000) return "M" + ToRoman(number - 1000);

        if (number >= 900) return "CM" + ToRoman(number - 900); 

        if (number >= 500) return "D" + ToRoman(number - 500);

        if (number >= 400) return "CD" + ToRoman(number - 400);

        if (number >= 100) return "C" + ToRoman(number - 100);            

        if (number >= 90) return "XC" + ToRoman(number - 90);

        if (number >= 50) return "L" + ToRoman(number - 50);

        if (number >= 40) return "XL" + ToRoman(number - 40);

        if (number >= 10) return "X" + ToRoman(number - 10);

        if (number >= 9) return "IX" + ToRoman(number - 9);

        if (number >= 5) return "V" + ToRoman(number - 5);

        if (number >= 4) return "IV" + ToRoman(number - 4);

        if (number >= 1) return "I" + ToRoman(number - 1);

    Scanner myKeyboard = new Scanner (System.in);
    System.out.println("Enter the integer: ");
    number = myKeyboard.nextInt();

    myKeyboard.close();


    }
}

У меня проблема в том, что я получаю сообщение об ошибке "Метод должен возвращать строку типа результата".

1 ответ

Вам нужна вспомогательная функция:

public String ToRomanWrapper()
{
    Scanner myKeyboard = new Scanner (System.in);
    System.out.println("Enter the integer: ");
    number = myKeyboard.nextInt();
    myKeyboard.close();
    return ToRoman(number);
}

public String ToRoman(int number){
    if ((number < 1 || (number > 3999)))
        return "INVALID"
    if (number >= 1000) return "M" + ToRoman(number - 1000);
    if (number >= 900) return "CM" + ToRoman(number - 900); 
    if (number >= 500) return "D" + ToRoman(number - 500);
    if (number >= 400) return "CD" + ToRoman(number - 400);
    if (number >= 100) return "C" + ToRoman(number - 100);            
    if (number >= 90) return "XC" + ToRoman(number - 90);
    if (number >= 50) return "L" + ToRoman(number - 50);
    if (number >= 40) return "XL" + ToRoman(number - 40);
    if (number >= 10) return "X" + ToRoman(number - 10);
    if (number >= 9) return "IX" + ToRoman(number - 9);
    if (number >= 5) return "V" + ToRoman(number - 5);
    if (number >= 4) return "IV" + ToRoman(number - 4);
    if (number >= 1) return "I" + ToRoman(number - 1);
    return "INVALID"
}

Кроме того, если вы не можете определить новые функции, вы можете сделать это в той же функции:

public String ToRoman(int number)
{                                                                                                         
    if ((number < 1 || (number > 3999)))
    {                           
        Scanner myKeyboard = new Scanner (System.in);
        System.out.println("Enter the integer: ");
        number = myKeyboard.nextInt();
        myKeyboard.close();     
        return ToRoman(number); 
    }                           
    else if (number >= 1000) return "M" + ToRoman(number - 1000);
    else if (number >= 900) return "CM" + ToRoman(number - 900); 
    else if (number >= 500) return "D" + ToRoman(number - 500);
    else if (number >= 400) return "CD" + ToRoman(number - 400);
    else if (number >= 100) return "C" + ToRoman(number - 100);            
    else if (number >= 90) return "XC" + ToRoman(number - 90);
    else if (number >= 50) return "L" + ToRoman(number - 50);
    else if (number >= 40) return "XL" + ToRoman(number - 40);
    else if (number >= 10) return "X" + ToRoman(number - 10);
    else if (number >= 9) return "IX" + ToRoman(number - 9);
    else if (number >= 5) return "V" + ToRoman(number - 5);
    else if (number >= 4) return "IV" + ToRoman(number - 4);
    else if (number >= 1) return "I" + ToRoman(number - 1);
}

Я не уверен, почему вы хотите сделать это, хотя. Чтение ввода в той же функции, которая обрабатывает ввод, было бы очень неприятно.

Другие вопросы по тегам