no to zalezi co od toho vsetkeho chces, lebo to co si napisal by bolo velmi neefektivne na take nieco ako: 4*(sin(12)+ 15*(3-2)/4*tan(cos(1-4*sin(0.1)))). A ak sa ti to nechce programovat tak pouzi kniznicu, nico ako symja, jep, exp4j. Vacsinou to funguje velmi jednoducho len to toho vlozis cely String a spustis vypocet. pozri si priklady.
No tak to si musis napisat sam. Ked som ja take nieco robil, tak som pouziva strom, s tym ze cislo (resp. funkcia) ma najvyssiu prioritu a opertory idu postupne {(*,/), (+,-)}, a koren je prvkom z tohto pola (aj ked Ved. cisla, netvoria ani len komutativnu grupu, vzhladom na poeraciu scitovania, ale cisto teoreticky) s najnizsou prijoritou, cize + alebo -.
priklad: sin(3*(15-4)+2*(cos(3) - 1):
| 15 4 | | cos(3) 1 |
| 3 - | 2 | - |
sin| * | *
+
A potom som volal pre kazdy nod len getValue() a ten mi vracal cislo, alebo ak to bola funkcia tak tu najskor spocital a takto iteroval az sa nedostal po cislo. Tam mozes vypisovat aj medzivypocty.
Moze byt, otazkou je ze, ked uz to mas takto rozlozene ci sa ti vobec oplati tu knihovnu pouzit :) (nie ze by to nebolo jednoduchsie, ale jednoducho niekolko krat za sebou parsujes nejaky String, navyse aj tak budes musiet pouzit rekurentne vyhladavanie, ak budes mat zatvorky v zatvorkach, cize vlastne urobis vacsinu roboty). Ja som zatvorky riesil pomerne jednoducho tak, ze som povedal ze vsetko co je ohranicene nejakou zatvorkou je funkciou a teda ma prioritu ako cislo. Tu je kod ako som, ja robil taketo nieco: https://github.com/sleepy771/IsotopeCalculator/blob/master/src/isocalc/function/parser/TreeFunction.java. Nieje to idealne, ale mozno z tho nieco vycitas, alebo sa pozri do tych kniznic co som ti posielal