Преобразование целых чисел в римские цифры в Java - PullRequest
0 голосов
/ 20 марта 2020

Домашнее задание для моего класса Java указывает нам на получение целочисленного ввода от пользователя (до 3999) и преобразование его в римскую цифру. Проблема, с которой я столкнулся в коде, заключается в том, что при вводе целого числа во время тестирования оно устанавливает целое число в 0, а римская цифра печатается как ноль. Это может быть результатом объявления переменных внутри объекта, но я не уверен в этом.

public class RomanNumerals
{

    // instance variables

    int input;
    String romanNum;

    /**
     * Object that records the input from a user.
     */
    public RomanNumerals()
    {
        int input=0;
        String romanNum="";

        //System.out.println("Input a number to get a Roman Numeral");
        //int input = integer.nextInt();
    }
    public int Scanner()
    {
        Scanner integer = new Scanner(System.in);
        System.out.println("Input a number to get a Roman Numeral: ");
        int input = integer.nextInt();
        return input;
    }
    /**
     * Object that takes the input from the user and determines what roman numerals are appropriate.
     */
    public String Int2Roman()
    {
        if (input < 1 || input > 3999)
        {
            System.out.println("Please input a number between 1 and 3999.");
        }
        while (input >= 1000)
        {
            romanNum = romanNum + "M";
            input = input - 1000;
        }
        while (input >= 900)
        {
            romanNum = romanNum + "CM";
            input = input - 900;
        }
        while (input >= 500)
        {
            romanNum = romanNum + "S";
            input = input - 500;
        }
        while (input >= 400)
        {
            romanNum = romanNum + "CS";
            input = input - 1000;
        }
        while (input >= 100)
        {
            romanNum = romanNum + "C";
            input = input - 100;
        }
        while (input >= 90)
        {
            romanNum = romanNum + "XC";
            input = input - 1000;
        }
        while (input >= 50)
        {
            romanNum = romanNum + "L";
            input = input - 1000;
        }
        while (input >= 40)
        {
            romanNum = romanNum + "XL";
            input = input - 40;
        }
        while (input >= 10)
        {
            romanNum = romanNum + "X";
            input = input - 10;
        }
        while (input >= 9)
        {
            romanNum = romanNum + "IX";
            input = input - 9;
        }
        while (input >= 5)
        {
            romanNum = romanNum + "V";
            input = input - 5;
        }
        while (input >= 4)
        {
            romanNum = romanNum + "IV";
            input = input - 4;
        }
        while (input >= 1)
        {
            romanNum = romanNum + "I";
            input = input - 5;
        }
        System.out.println("The Roman Numeral of " + input + " is " + romanNum);
        return romanNum;
    }
    public static void main(String[] args)
    {
        RomanNumerals a = new RomanNumerals();
        a.Scanner();
        a.Int2Roman();
    }
}

1 Ответ

0 голосов
/ 20 марта 2020

Ваш метод Scanner не сохраняет ввод с клавиатуры в поле (переменная экземпляра) input, но в локальной переменной input.

Замените

int input = integer.nextInt(); //this declares a new local variable

на

input = integer.nextInt(); //uses the existing field 
...