string calculator

0

Witam
W ramach ćwiczeń z javą piszę string calculator.
Funkcja przyjmuje trzy argumenty: cyfra operator cyfra, np dwa plus trzy - i powinna zwrócić 5.
Postanowiłem użyć tablic asocjacyjnych (HashMap) dla cyfr.
Mam natomiast problem z operatorem, tzn jak string plus zamienić na operację - chciałem coś ciekawszego niż case, ale niezbyt trudnego (skomplikowanego) na początek. Jakieś pomysły na rozwiązanie ?

0

ONP

0

A co mi da odwrotna notacja ?
np: dwa trzy plus
W moim przypadku chyba jedynie zmienia kolejność argumentów przyjmowanych z linii poleceń. Przez to operator pobieram z trzeciego a nie z drugiego argumentu. Ten program będzie przyjmował tylko trzy argumenty więc nie wiem czy to się przyda. Poza tym głównie chodziło mi o to, że mam już stringa "plus" czy "minus", już po sprawdzeniu czy jest poprawny ... i tu się zaciąłem, jak string plus "zamienić" na operację dodawania jak to jest w przypadku cyfr gdzie mam HashMap <String, Integer> i np dla stringa zero mam parę "zero",0. Mogę tą cyfrę wyciągnąć i używać jako wartości a nie napisu. Szukam właśnie czegoś podobnego do tego dla podstawowych operacji + - * /

0

Witam

Gdyby ten kalkulator miał być napisany w jakimś języku, w którym istnieje funkcja eval ( np. w
języku PERL ), to nie byłoby problemu. Można byłoby poszczególne wyrażenia ( operacje dodawania, odejmowania, itp. ) zapisać jako łańcuchy w tablicy asocjacyjnej, a tablicę tę indeksować symbolami poszczególnych operatorów. Jeśli chodzi o implementację funkcji eval w Javie, to proponuję następujące linki :

http://mindprod.com/jgloss/eval.html
http://www.webdeveloper.com/forum/showthread.php?t=94854
http://www.coderanch.com/t/391737/java/java/Equivalent-eval-function-java

                                                                                          Pozdrawiam

                                                                                                 JK
0

Po co pchać do tego eval? Nie lepiej zrobić tablicę wskaźników na funkcję/delegatów (nie wiem co tam w Javie jest)?

0

Możesz stworzyć interfejs Operator z metodą eval(a, b), a potem mapę String -> Operator w już oczywisty sposób:

put("+", new Operator(){ eval(a, b) {return a + b;} }

itd., jako że w Javie nie ma referencji do funkcji.

0

i tu się zaciąłem, jak string plus "zamienić" na operację dodawania

switch (rodzaj_operacji)
{
  case dodawanie : return a + b;
  case odejmowanie : return a - b;
  case mnozenie : return a * b;
  case dzielenie : return a / b;
}

czy w jakim tam języku to piszesz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1