Code während des laufenden Programms eingeben

Status
Nicht offen für weitere Antworten.

apfelbacke

Mitglied
Hallo zusammen,

ich hab folgendes Problem: Im Rahmen meiner Hiwi Stelle soll ich ein Programm schreiben welches
Funktionen die sich wechselseitig beeinflussen und von denen manche Variablen zwischendurch
editierbar sind im zeitlichen Verlauf graphisch darstellt.
Ein riesen Problem dabei ist das in einem Eingabefenster der laufenden Applikation Variablen
deklariert und mit Formeln belegt werden sollen, welche alle möglichen Funktionen
inc der der klasse java.lang.math beinhalten sollen.
Ich hab mir mal überlegt wie aufwendig es wäre ein Einleseprogramm zu programmieren
welches den eingelesen String schrittweise auf Klammern, Operatoren, Variablen usw
überprüft und dann schrittweise aus den erkannten Operatoren unter Zuhilfenahme
einer strikten Klammersetzung zwischen jeder operation Funktionswerte zusammenbastelt.

Wäre es nicht auch irgendwie möglich dem Programm die Funktionen in reinem Java Code zu geben
und die Funktionswerte praktisch im laufenden Programm durch variablen Code zu errechnen?
Ich weiss das die wahrscheinliche Antwort "nein du trottel!" ist, drum hab ich es mal bei Anfängerfragen
reingestellt 😀

Auch gut wäre falls jemand schon mal auf ähnliches Problem gestossen ist und vielleicht entsprechenden Code zum Einlesen von Funktionen hat. Ich würde auch was springen lassen selbstverständlich.

Vielen Dank schonmal für alle Antworten

apfelbacke
 
Danke erstmal für die Antworten.

Ich hab mich so gut es ging über Beanshell schlaugemacht, und es scheint wohl die beste lösung
für mein Problem zu sein. Wie genau ich es einbinde darüber hab ich aber fast nichts gefunden,
weder tutorials im netz noch in den Beiträgen über Beanshell in diesem Forum,
wo ja probleme besprochen wurden die man auch mit einfachen "normalen" Methoden hätte Lösen können.
Da du dich aber ganz gut auszukennen scheinst, bleiglanz, wollte ich mal höflich anklopfen ob du mir
sagen kannst wie ich so einen interpreter in mein Programm einbaue sodass er
zB in einer actionPerformed Methode gestarted wird, einen beliebigen String wie zB X=pow(2,a)*sin(sonstwas)
bekommt welchen er als Code behandelt und mir anschliessend den (double) wert für X zurückliefert.

Ich weiss dass hier keine hausaufgaben gemacht werden aber ich komm echt gar nicht mehr weiter..
 
bist du dem Link oben gefolgt?
Code:
import bsh.EvalError;
import bsh.Interpreter;
public class Dynamisch {
    public static void main(String[] a){
        try {
            Interpreter i = new Interpreter();
            i.set("zahl", 42); // variablen reinlegen               
            i.eval("ergebnis = Math.sin(zahl)+zahl"); // Auswerten: x+sin(x)           
            i.eval("System.out.println(\"Ergebnis=\"+ergebnis)"); // Ausgeben
        } catch (EvalError e) {
            e.printStackTrace(); // AUSNAHMSWEISE
        }
    }
}
Was passt dir nicht an dem Code? wenn du dir die Zeile
Code:
 i.eval("ergebnis = Math.sin(zahl)+zahl");
anschaust, dann ist ja wohl klar, dass da ein String genomen wird und der Wert berechnet??

du kannst nicht erwarten, dass dir die BeanShell das "Math." vor dein "pow" einfach hinzufügt, genauso müssen die verwendeten Variablennamen bekannt sein!?
 
OK ich schein echt tomaten auf den augen gehabt zu haben gestern. Also kann ich auch zB i.eval(jt.getText());
schreiben, und es wird erkannt wenn ich davor alle
verwendeten Variablen mit set deklariert habe.
eine dumme frage hätte ich aber noch:
wie intergriere ich die beanshell wenn
mein Interpreter nicht in der main, sondern in einer anderen methode in einer anderen klasse gestartet werden soll?
ich meine mit
java -cp .😛fadzur/beanshell/bsh-2.0b2.jar Dynamisch
starte ich ja nur eine main methode starten oder?
wie muss ich die beanshell dann einbinden?

danke für die gelduld 🙂
 
so wie jedes andere jar auch?

java -cp .😛fadzur/beanshell/bsh-2.0b2.jar:irgendwa/anderes.jar:undauch/ich:nocheinpfad Irgendeinprogramm
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben