Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 01.08.2015
Сообщений: 104

Работа со стандартными функциями арифметики

03.12.2018, 15:57. Показов 703. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет. Задача стоит так: есть метод, скажем, для деления чисел. В его аргументы передают два числа, но в виде строк. Необходимо произвести соответствующее арифметическое действие и вывести в виде строки результат. Вопрос: подскажите, корректно ли я реализовал данную задачу? Мне кажется, что все это громоздко, но работает корректно.
Скидываю реализацию метода деления, по такому же принципу написал все остальные (для сложения, вычитания, умножения). И вот из-за того, что много пришлось дублировать код, возникли сомнения по поводу качества решения. Хотя как отдельно вынести проверку на тип числа я пытался сделать, но тогда эта проверка должна возвращать эти два числа, но как? В массиве или как объект? А потом в функции деления опять делать проверку, какое же это число пришло - double или int. Кстати, в задаче использую проверку только на эти два типа, так как посчитал остальные излишними.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public String div(String arg0, String arg1) {
 
        try {
 
            if ((arg0.toLowerCase().contains("e")
                    | arg0.toLowerCase().contains("."))) { // пытаюсь определить double тип или нет
 
                if (arg1.toLowerCase().contains("e")
                        | arg1.toLowerCase().contains(".")) { // если первое число double, проверяют второе на double
                    doubleDivision = Double.parseDouble(arg0)
                            / Double.parseDouble(arg1);
                } else { // если второе не double, значит оно integer
                    doubleDivision = Double.parseDouble(arg0)
                            / Integer.parseInt(arg1);
                }
                view_div = new BigDecimal(doubleDivision)
                        .setScale(2, RoundingMode.UP).doubleValue();
                result = String.valueOf(view_div);
 
            } else {
 
                if (arg1.toLowerCase().contains("e")
                        | arg1.toLowerCase().contains(".")) {
                    doubleDivision = new BigDecimal(
                            Integer.parseInt(arg0) / Double.parseDouble(arg1))
                                    .setScale(2, RoundingMode.UP).doubleValue();
                    result = String.valueOf(doubleDivision);
                } else {
                    integerDivision = Integer.parseInt(arg0)
                            / Integer.parseInt(arg1);
                    result = String.valueOf(integerDivision);
                }
            }
        } catch (NumberFormatException e) {
            System.out.println("Uncorrect input data");
        }
 
        return result;
    }
В общем как-то так. Помогите, пожалуйста. Буду весьма признателен за любые подсказки.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.12.2018, 15:57
Ответы с готовыми решениями:

Работа со стандартными объект-функциями
Помогите пожалуйста!!!Задали задачку перед экзаменом по си++!! Создайте пустой контейнер вектор с элементами типа int. Заполните его...

Создание цикла стандартными функциями
Как то прочитал что можно задать цикл в формуле ячейки используя стандартные функции для работы с массивами. Правда, как это сделать не...

Как стандартными функциями Delphi
Запретить перемещение (перетаскивание) и изменение размера ФОРМЫ, по отдельности могу а вот вместе (перемещение и изменение) не получается...

5
485 / 411 / 126
Регистрация: 23.05.2016
Сообщений: 1,653
03.12.2018, 17:59
Исключения можно использовать для управления порядком выполнения команд, например, так:

Java
1
2
3
4
5
6
7
8
        Integer intNumber=null;
        Double dNumber= null;
        try {
            intNumber = Integer.parseInt(arg);
        }
        catch (NumberFormatException e){
            dNumber = Double.parseDouble(arg);
        }
Цитата Сообщение от Kirillgo Посмотреть сообщение
много пришлось дублировать код
дублирование кода надо выносить в подпрограммы
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
03.12.2018, 18:00
Цитата Сообщение от Sindbad_M Посмотреть сообщение
try catch
это ужасно
Цитата Сообщение от Sindbad_M Посмотреть сообщение
выносить в подпрограммы
шта?
0
226 / 184 / 80
Регистрация: 13.04.2014
Сообщений: 694
03.12.2018, 18:15
Наверное не очень писать сразу для двух типов. Попробуй сделать сперва для целых чисел. Обработай все исключения, возможные варианты входных данных и тд. Потом напиши отдельный класс для вещественных чисел. после ты увидишь некую абстракцию и сможешь двигаться дальше в написании кода
0
0 / 0 / 0
Регистрация: 01.08.2015
Сообщений: 104
04.12.2018, 12:01  [ТС]
Спасибо за подсказки.
0
 Аватар для Aviz__
2741 / 2050 / 507
Регистрация: 17.02.2014
Сообщений: 9,470
04.12.2018, 13:37
если совсем просто, для двух чисел, то вот:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class Calculator {
 
    private static void getAnswer(String mathExpr) {
        char [] operators = {'+','-','/','*'};
        char oprtr = ' ';
        for (char tmp : operators)
            if (mathExpr.indexOf(tmp) != -1)
                oprtr = tmp;
        String [] nums = mathExpr.split("\\W+");
        switch (oprtr){
            case '+' :
                System.out.printf("%s = %d%n",mathExpr, (Integer.valueOf(nums[0]) + Integer.valueOf(nums[1])));
                break;
            case '-' :
                System.out.printf("%s = %d%n",mathExpr, (Integer.valueOf(nums[0]) - Integer.valueOf(nums[1])));
                break;
            case '*' :
                System.out.printf("%s = %d%n",mathExpr, (Integer.valueOf(nums[0]) * Integer.valueOf(nums[1])));
                break;
            case '/' :
                System.out.printf("%s = %.2f%n",mathExpr, (1.0*Integer.valueOf(nums[0]) / Integer.valueOf(nums[1])));
                break;
                default:
                    System.out.println("Действие \""+mathExpr+"\" не поддерживается в этой версии!");
        }
    }
 
    public static void main(String[] args) {
        getAnswer("11 + 33");
        getAnswer("11 - 33");
        getAnswer("11*33");
        getAnswer("33/11");
        getAnswer("33^11");
    }
}
результат работы:

11 + 33 = 44
11 - 33 = -22
11*33 = 363
33/11 = 3,00
Действие "33^11" не поддерживается в этой версии!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.12.2018, 13:37
Помогаю со студенческими работами здесь

Строки, решение задание стандартными функциями
Задание: В строке имеются лишние проблемы Нужно преобразовать ее так, чтобы между словами был ровно один пробел. Подскажите, с помощью...

Поиск соответствия, желательно стандартными функциями
Госопода, прошу помощи. Есть табличка вида: 321 aaa 323 x 322 bbb 321 x 323 ccc 322 x Как сделать так,...

Возможно ли организовать файл со структурами стандартными средствами и функциями языка?
Помогите, пожалуйста, разобраться с файлами в Си. На Паскале очень удобно работать с файлами своего типа, такими как структура. Например,...

Как создать блок схему для функции с вложенными стандартными функциями?
есть функция например такая function RandomEd: edinica; begin RandomEd := edinica(Random(ord(High(edinica)))); end; ...

Работа с БД SQLlite стандартными средствами C#
Собственно есть тулза, состоящая из одного исполняемого файла. С недавних пор, понадобилась внести в ее функционал возможность считывать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru