Как работать с римскими числами на java

133
08 июля 2021, 02:50

Всем привет! Есть задание: написать калькулятор

  • Калькулятор умеет работать с арабскими и римскими числами
  • должен принимать на вход числа от 1 до 10 включительно, не более
  • Калькулятор умеет работать только с целыми числами

Код:

import java.util.Scanner;
public class MainClass {
    public static void main(String[] args) {
        int value1 = 0;
        int value2 = 0;
        String operation = null;
        System.out.println("Введите 2  целых числа: ");
        Scanner scanner = new Scanner(System.in);
        if (value1 > 0 || value1 < 10) {
            value1 = scanner.nextInt();
            operation = scanner.next();
            value2 = scanner.nextInt();
        }
        if (operation.equals("+")) {
            System.out.println(value1 + value2);
        }
        if (operation.equals("-")) {
            System.out.println(value1 - value2);
        }
        if (operation.equals("*")) {
            System.out.println(value1 * value2);
        }
        if (operation.equals("/")) {
            System.out.println(value1 / value2);
        } else {
            System.out.println("error!");
        }
    }
}

Вопрос: как тоже самое сделать с римскими числами?

Answer 1

Сделайте для себя собственный словарь

string [] arab = new string[10]{"10","1","2","3","4","5","6","7","8","9"};
string [] rome = new string[10]{"X","I","II","III","IV","V","VI","VII","VIII","IX"};

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

Answer 2

Можете использовать перечисление и определить в нём нужные вам методы конвертации

enum RomanNumeral {
  I("I", 1), IV("IV", 4);...и т.д.
  private int value;
  private String key;
  RomanNumeral(String key, int value) {
    this.value = value;
  }
  public int getValue() {
    return value;
    public String getKey() {
      return key;
    }
    static int toInt(String key) {
      for (RomanNumeral i: this.values())
        if (i.getKey.equals(key))
          return i.getValue();
      return "";
    }
  }
Answer 3

Вам потребуется два дополнительных метода: один будет переводить любое арабское число в римское, а другой - любое римское в арабское.

К примеру, вам пришли строки "IV" и "X". Сначала, вы переводите каждую в арабское число, потом производите с ними математическую операцию так же, как и делаете сейчас, а затем результат конвертируете обратно в римскую систему. Примеров логики конвертации множество, например, вот этот.

READ ALSO
Альтернатива переопределения enum

Альтернатива переопределения enum

Стоит задача парсить нескдесятков сайтов, большая часть селекторов которых идентична

110
Как построить обмен между серверной частью на java и клиентами на android?

Как построить обмен между серверной частью на java и клиентами на android?

Сервер принимает запрос (скажем до 100) одновременно и либо отсылает изображение / список изображений клиенту (андроид), либо генерирует его...

77
Не работает Integer.toString();

Не работает Integer.toString();

Подскажите, не могу понять почему

81
Вывести значение Value с объекта в Alert();

Вывести значение Value с объекта в Alert();

Интересует вопрос, как можно реализовать вывод конкретных данных с объекта через JavaScript Vanilla? Есть ли какие-либо способы парсинга данных значений?...

89