# Eingegeben Formeln in Quellcode einbetten?!



## Gelöschtes Mitglied 36296 (23. Aug 2012)

Hallo zusammen,

ich habe eine Frage:
Gibt es eine Möglichkeit, dass man z.B. in einem JTextField eine mathematische Berechnung eingiebt und diese dann so in den Quellcode einbettet, dass wenn man z.B. einen JButton drückt, diese Berechnung als Formel ausgeführt wird(Formel, die auch Variablen beinhaltet, auf die dann referenziert wird).
Ich brauche das um Berechnungen auf Grund von Daten aus einer Datenbank anstellen zu können.

Noch zum Verständnis:
Ich habe eine Datenbank mit viiiiiielen Werten. Jetzt gibt es z.B. eine leere Spalte in der Datenbank. Diese möchte ich dann beschriften und um den Inhalt zu bestimmen eine mathematische Berechnung anstellen. Gibt es da die Möglichkeit, diese Berechnung einzubetten oder anderweitig einzubinden, dass ich dann einen berechneten Wert in der Spalte der Datenbank erhalte und diesen eintragen kann?

Danke schon mal im Vorraus an alle, die sich mit dem Problem auseinandersetzen 
Boldi


----------



## Landei (23. Aug 2012)

Nein, nicht ohne entsprechende Bibliotheken, die den String parsen und berechnen, oder den String zur Laufzeit in eine Klasse compilieren. 

Die "Billig-Alternative" ist, die Arbeit die eingebaute JavaScript-Engine (Rhino) machen zu lassen. Siehe Wikipedia.


----------



## Gelöschtes Mitglied 36296 (27. Aug 2012)

danke für die Antwort,

das mit Rhino hilft mir nicht wirklich wieter, da ich nicht in JavaScript sondern Java programmiere 
ich werd das wohl mit Bibliotheken lösen müssen.
Ein Freund von mir hat mir noch die Idee mit einem sql-statement gegeben. Er meint, man könne die Formel dann quasi in eine sql-abfrage "drücken".
Weiß jemand ob, und wenn ja, wie das genau geht?

Danke schon mal 
Boldi


----------



## ARadauer (27. Aug 2012)

Boldi hat gesagt.:


> da ich nicht in JavaScript sondern Java programmiere i





java kann javascript ausführen und javascript kann mit eval math ausdrücke auswerten... so war das gemeint... denke ich...
zb


```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

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

public class Test {

    public static void main(String[] args) throws IOException {
        BufferedReader r = new BufferedReader(new InputStreamReader(System.in));

        System.out.print("Formel eingeben: ");
        String formel = r.readLine();
        ScriptEngineManager factory = new ScriptEngineManager();
        ScriptEngine engine = factory.getEngineByName("JavaScript");

        try {
            engine.eval("var v = eval('" + formel + "')");
            double b = (Double) engine.get("v");

            System.out.println("Ergebnis: " + b);
        }
        catch (ScriptException e) {
            System.out.println("Das war wohl nix");
            e.printStackTrace();
        }

    }

}
```
gib da mal 11+3*5 ein


----------



## kaetzacoatl (27. Aug 2012)

Ich hab was(unschönes siehe die vielen Exceptions...)
programmiert, was mit Referencen arbeitet:

```
public class A {
	
	int a = 2;
	int b = 4;
	int c = 1;
	
	public int berechne(String str) throws IllegalArgumentException, IllegalAccessException, SecurityException, NoSuchFieldException{
		Field var1 = getClass().getDeclaredField(str.substring(0, str.indexOf('+')));
		Field var2 = getClass().getDeclaredField(str.substring(str.indexOf('+')+1));
		return var1.getInt(this)+var2.getInt(this);
	}
	
	public static void main(String[] args) throws IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException, IOException{
		System.out.println(new A().berechne(new BufferedReader(new InputStreamReader(System.in)).readLine()));
	}

}
```


----------

