Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
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
Tyvole nazdar :-) ... ty se tu taky ukážeš jednou za sto let co :-) nový
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… nový
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. nový
Wikan 17.03.2013 16:24
Wikan
Proč myslíš? nový
MaSo 17.03.2013 16:59
MaSo
Protože se tam dá vnutit v podstatě libovolný JS kód. nový
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 š… nový
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 čá… nový
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… nový
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