Witam,
Mam pytanie, potrzebuje w moim programie po jego uruchomieniu wpisywać dowolną funkcję z klawiatury na której potem program będzie działał, liczył na niej.
Pytanie w jaki sposób to zrobić w jednym ciągu?
Np. po uruchomieniu programu w wpisuje sobie dowolna funkcję, może być x^2+2*3 i podaje wartosc x np.1
I chce móc obliczyć wartość tej podanej funkcji dla x=1
Dziękuję za pomoc i pozdrawiam :)
Stwórz dwie tablice: liczby i znaki (ustal iż x jest liczbą; jako że między dwoma liczbami zawsze jest znak).
Każdy za znaków funkcji dodaj do odpowiedniej z tablic.
Zamień x
na podaną liczbę.
Biorąc pod uwagę kolejność wykonywania działań dopasuj odpowiednie warunki, np.
pętla każdy znaki
jeśli znak = '*'
kolejna liczba = liczba * kolejna liczba
koniec pętli
pętla każdy znaki
jeśli znak = '+'
kolejna liczba = liczba + kolejna liczba
koniec pętli
Wynik powinien znajdować się w ostatniej komórce tabeli.
Tak właśnie sobie to wyobrażam ;)
A może tak na leniwca:
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
class Ideone {
public static void main(String args[]) {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
try {
String input = "Math.pow(x,2)+2*3";
int x = 1;
engine.put("x", x);
Object result = engine.eval("y = "+input+";");
System.out.println(String.format("%s dla x=%d = %s",input,x,result));
} catch (ScriptException e) {
System.err.println(e);
}
}
}
Tyle, że cale wyrażenie funkcji musiałoby być w tym przypadku w javascripcie. Zależy jakie masz wymagania odnośnie tego co wpisujesz ale mój przykład można by trochę przerobić i próbować zastępować x^2 wywołaniem Math.pow z javascript, tak, żeby nie trzeba tego wpisywać z konsoli. Tylko, że to oznacza parsowanie wpisywanego tekstu, czego chciałem uniknąć ;)
Rozwiązanie bezczelnie zerżnąłem i przerobiłem stąd: http://www.java2s.com/Tutorial/Java/0120__Development/VariablesboundthroughScriptEngine.htm