Вниз  Java-программирование (1-ые посты)
- 23.03.2016 / 11:37
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
ВитаминКО, ты с типами накосячил. У тебя operator - String, результат считается в double, а присваивается в String.

Перебирать операции или создавать ассоциативный массив тебе всё равно придётся, потому что нельзя просто так задать соответствие между "+" и Operations.PLUS.

  1. Operations op = Operations.valueOf(operator); // но так operator должен иметь имя Enum - "PLUS", "MINUS", ...
  2. result = String.valueOf(op.getResult(argument1, argument2));
  3.  
  4. // Разве что вот так перебирать.
  5. for (Operations op : Operations.values()) {
  6.     if (op.operator.equals(operator)) {
  7.         result = String.valueOf(op.getResult(argument1, argument2));
  8.         break;
  9.     }
  10. }

__________________
 let live

Изменено aNNiMON (23.03 / 11:42) (всего 2 раза)
- 23.03.2016 / 11:39
ВитаминКО
  Супермодератор

ВитаминКО 
Сейчас: Offline
http://annimon.com/forum/?act=post&id=458493
Вроде понял, чего не хватает, тестирую..

aNNiMON, ща проверю и типы. Не, исключение кидает, No enum const class. Сейчас попробую метод тот модифицировать и уже от этого буду исходить.
Да, перебор как раз хотел добавить.
__________________
 わからない!!

Изменено ВитаминКО (23.03 / 11:45) (всего 3 раза)
- 23.03.2016 / 11:45
Ginosaji
  Пользователь

Ginosaji 
Сейчас: Offline
ВитаминКО, через Enum тогда можно так:
Вместо:
  1. result = operator.getResult(argument1, argument2);
так:
  1. Operations op = Operations.valueOf(operator);
  2. result = op.getResult(argument1, argument2);


Изменено Ginosaji (23.03 / 11:47) (всего 1 раз)
- 23.03.2016 / 12:28
ВитаминКО
  Супермодератор

ВитаминКО 
Сейчас: Offline
в общем, как-то так
Run.java
EOperations.java
Работает, остается только допилить проверки на нуль и т.д., работу в цикле и дополнительные исключения выбрасывать.

Сяп за помощь :)

Потом попробую с интерфейсами еще :gg:
__________________
 わからない!!

Изменено ВитаминКО (23.03 / 12:30) (всего 1 раз)
- 23.03.2016 / 12:46
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
ВитаминКО, с интерфейсами всё-таки меньше кода. А здесь ты Enum используешь не по назначению. К тому же, перебор в цикле не есть хорошо. Гораздо быстрее будет работать, если воспользуешься HashMap.

  1. private static final Map<String, Operation> operations;
  2. static {
  3.     operations = new HashMap<>();
  4.     operations.put("+", new Operation() {
  5.         public double getResult(double a, double b) {
  6.             return a + b;
  7.         }
  8.     }
  9. }
  10.  
  11. interface Operation {
  12.     double getResult(double arg1, double arg2);
  13. }
  14.  
  15. // Operation getOperator()
  16.  
  17. System.out.println("Enter operation: ");
  18. String op;
  19. do {
  20.     op = sc.next();
  21. } while (!operations.containsKey(op));
  22. return operations.get(op);

__________________
 let live

Изменено aNNiMON (23.03 / 12:47) (всего 1 раз)
- 23.03.2016 / 13:35
ВитаминКО
  Супермодератор

ВитаминКО 
Сейчас: Offline
aNNiMON, я не настолько продвинут, чтобы так далеко заходить. Нам дали задание - заюзайте перечисления вместо ваших дрянных свитчей.
ООП только началось, а до коллекций и тп еще далеко.

Да, скопировать - скопирую, только я все равно пока не пойму, не хочу нагружаться. У нас цель - написать не столько быстрый, сколько читабельный, легко расширяемый и понятный код. Придерживаясь Java Conventions.

:ps: скучаю по паскалю :lol:
__________________
 わからない!!
- 23.03.2016 / 13:40
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Цитата ВитаминКО:
Нам дали задание - заюзайте перечисления
C этого бы и начинал.
Цитата ВитаминКО:
У нас цель - написать не столько быстрый, сколько читабельный, легко расширяемый и понятный код.
Насчёт понятности ладно, каждому своё, а вот расширяемости в Enum'ах нет.
__________________
 let live
- 23.03.2016 / 15:55
mcdevil
  Пользователь

mcdevil 
Сейчас: Offline
Sweety, Этот код не работает на me, не знаю на се как работает.
Вообщем в вектор добавляются элементы типы которых не известны, нужно например сложить два элемента, но нужно определить какому типу относятся эти элементы с максимальной производительностью. :-(
- 23.03.2016 / 21:11
Naik
  Пользователь

Naik 
Сейчас: Offline
ВитаминКО, энамки не наследуются :gg:
- 23.03.2016 / 21:12
Naik
  Пользователь

Naik 
Сейчас: Offline
mcdevil, visitor в помощь
Наверх  Всего сообщений: 16875
Фильтровать сообщения
Поиск по теме
Файлы топика (794)