Особые требования для калькулятора на Java [закрыт]

276
02 июля 2021, 04:40
Закрыт. Данный вопрос необходимо конкретизировать. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме.

Закрыт 1 год назад.

Улучшить вопрос

Есть калькулятор на java, но для него нужны особые условия:

  1. Калькулятор умеет выполнять операции сложения, вычитания, умножения и деления с двумя числами: a + b, a - b, a * b, a / b. Данные передаются в одну строку! Решения, в которых каждое число и арифмитеческая операция передаются с новой строки считаются неверными.

  2. Калькулятор умеет работать как с арабскими (1,2,3,4,5…), так и с римскими (I,II,III,IV,V…) числами

    (Пример:
    Input: 1 + 2; Output: 3;
    Input: VI / III; Output: II)

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

  4. Калькулятор умеет работать только с арабскими или римскими цифрами одновременно, при вводе пользователем строки вроде 3 + II калькулятор должен выбросить исключение и прекратить свою работу.

Как эти пункты возможно реализовать в данном коде?

import java.util.Scanner;
 
public class Calculator {
    static Scanner scanner = new Scanner(System.in);
 
    public static void main(String[] args) {
        int num1 = getInt();
        int num2 = getInt();
        char operation = getOperation();
        int result = calc(num1,num2,operation);
        System.out.println("Результат операции: "+result);
    }
 
    public static int getInt(){
        System.out.println("Введите число:");
        int num;
        if(scanner.hasNextInt()){
            num = scanner.nextInt();
        } else {
            System.out.println("Вы допустили ошибку при вводе числа.");
            scanner.next();//рекурсия
            num = getInt();
        }
        return num;
    }
 
    public static char getOperation(){
        System.out.println("Введите операцию:");
        char operation;
        if(scanner.hasNext()){
            operation = scanner.next().charAt(0);
        } else {
            System.out.println("Вы допустили ошибку при вводе  операции.");
            scanner.next();//рекурсия
            operation = getOperation();
        }
        return operation;
    }
 
    public static int calc(int num1, int num2, char operation){
        int result;
        switch (operation){
            case '+':
                result = num1+num2;
                break;
            case '-':
                result = num1-num2;
                break;
            case '*':
                result = num1*num2;
                break;
            case '/':
                result = num1/num2;
                break;
            default:
                System.out.println("Операция не распознана. Повторите ввод.");
                result = calc(num1, num2, getOperation());//рекурсия
        }
        return result;
    }
}
Answer 1

Как эти пункты возможно реализовать в данном коде?

В данном коде числа вводятся последовательно из командной строки, также отдельно вводится знак. Эта задача намного проще.
Поэтому вопрос нужно ставить по-другому, что можно взять из этого кода для реализации вашей задачи.
А взять можно принципы ввода данныхscanner.next() и метод calc(int num1, int num2, char operation) для определения знака операции.
Остальное всё нужно писать. Получать строку, парсить, проверять на условия.

READ ALSO
Помочь разобрать с Конструктором

Помочь разобрать с Конструктором

Как можно вызвать нужный конструктор у класса Sender, когда мы не знаем какой именно передаем Device через цикл?

122
Почему getComputedStyle() отдает пустую строку во Vue?

Почему getComputedStyle() отдает пустую строку во Vue?

Для тренировки пишу простенький таймер на Vuejs Столкнулся с ошибкой при которой window

152