Předmět Autor Datum
v akom jazyku? pre konkretny jazyk hladaj funkciu eval. bud bude interna alebo ju uz niekto napisal.…
IgorK 16.03.2013 20:19
IgorK
Igor žije!!! Čau :)
karel 16.03.2013 20:22
karel
zijem, cau. :) ot: dnes je formula 1, budes pozerat?
IgorK 16.03.2013 20:38
IgorK
Taky OT: To jsem málem nezaregistroval, budu.
karel 16.03.2013 20:41
karel
ot pokracuje: o 1:00 je kvalifikacia, presunuli ju kvoli dazdu.
IgorK 16.03.2013 20:43
IgorK
OT: Klidně mohli na dvě hodiny, koupil jsem sedmičku ___ za 249,- Kč. Budu se udržovat v bdělém stav…
karel 16.03.2013 20:52
karel
Tyvole nazdar :-) ... ty se tu taky ukážeš jednou za sto let co :-)
marekdrtic 17.03.2013 15:14
marekdrtic
Podle toho tedy vypadá, že tu IgoraK zase dlouho neuvidíme :-( Škoda, jeho kurzy pro mladé hackery b…
Jack 17.03.2013 16:09
Jack
V Javě bohužel taková funkce není, takže si ji můžeš buď naprogramovat sám nebo se to dá ochcat přes…
MaSo 17.03.2013 15:05
MaSo
Ale to zavolání JS může být dost velká bezpečnostní díra.
Wikan 17.03.2013 16:24
Wikan
Proč myslíš?
MaSo 17.03.2013 16:59
MaSo
Protože se tam dá vnutit v podstatě libovolný JS kód.
Wikan 17.03.2013 17:01
Wikan
Jo takhle, tam by se dalo narvat v podstate cokoli i Java kód. No musí si to hlídat, třeba nějakým š…
MaSo 17.03.2013 17:26
MaSo
a nešlo by použít Iteger.parseInt? používal jsem to když jsme ve škole dělali kalkulačku. Tady je čá…
tom.win 17.03.2013 23:43
tom.win
To by teda nešlo, tady se řeší úplně jiný problém... poslední
MaSo 17.03.2013 23:54
MaSo
Ak si to budeš implementovať sám, tak najjednoduchšie je spraviť si 2 zásobníky (jeden pre operátory…
los 17.03.2013 19:46
los

V Javě bohužel taková funkce není, takže si ji můžeš buď naprogramovat sám nebo se to dá ochcat přes zavolání javascriptu z Javy.

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;

public class Test {
  public static void main(String[] args) throws Exception{
    ScriptEngineManager mgr = new ScriptEngineManager();
    ScriptEngine engine = mgr.getEngineByName("JavaScript");
    String foo = "40+2";
    System.out.println(engine.eval(foo));
    } 
}

a nešlo by použít Iteger.parseInt? používal jsem to když jsme ve škole dělali kalkulačku. Tady je část pro sčítání:

  int a = Integer.parseInt(jTextArea1.getText());
int b = Integer.parseInt(jTextArea2.getText());      
int vysledek;
vysledek = a + b;
jTextArea3.setText(String.valueOf(vysledek));
jTextArea3.setText("Výsledek: " + String.valueOf(vysledek));

Ak si to budeš implementovať sám, tak najjednoduchšie je spraviť si 2 zásobníky (jeden pre operátory, druhý pre operandy), postupne prechádzať výrazom (napíšeš si lexer, t.j. funkciu, ktorá ti bude vracať nasledujúci token zo vstupu) a vyhodnocovať podľa priority operátorov. Pozri si algoritmus shunting-yard.

Zpět do poradny Odpovědět na původní otázku Nahoru