Script-Verarbeitung in Java
|
Elementare Benutzung der eines ScriptEngine-Objektes
import java.io.InputStreamReader; import javax.script.*; public class Script1 { public static void main(String[] args) { ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); engine.put("x","45"); engine.put("y","15"); try { // engine.eval("z=abs(x)+180*Math.sin(x)/Math.PI;"); // engine.eval("z=Math.abs(x)+Math.abs(y);"); // engine.eval("z=Math.abs(0)+x+y;"); String skript = "function funk(Zahl) { return Zahl*Zahl }"; // engine.eval(skript+"\nz=funk(7);"); engine.eval(skript); engine.eval("z=funk(7);"); } catch(Exception e) { System.out.println(e); } Object z = engine.get("z"); System.out.println(z.toString()); } }
Code 0-1: Elementare Benutzung der eines ScriptEngine-Objektes.
Handhabung von Arrays
import java.io.InputStreamReader; import javax.script.*; public class Script2 { public static void main(String[] args) { ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); String skript = ""; skript += "var f = new Array(2);\n"; skript += "f[0]=1;\n"; skript += "f[1]=2;\n"; skript += "var x = f[0]+f[1];\n"; try { engine.eval(skript); } catch(Exception e) { System.out.println(e); } Object x = engine.get("x"); System.out.println(x.toString()); } }
Code 0-2: Handhabung von Arrays.
Beschreibung eines DGLS als Skript und dessen Integration
import java.io.InputStreamReader; import javax.script.*; import java.lang.reflect.Array; import sun.org.mozilla.javascript.NativeArray; public class Script3 { public static String wandleArray(double[] arr) { StringBuffer erg = new StringBuffer(); erg.append("new Array("); for(int i=0;i<arr.length;i++) { erg.append(arr[i]+""); if(i<arr.length-1) erg.append(","); } erg.append(")"); return erg.toString(); } public static void main(String[] args) { ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); StringBuffer sb = new StringBuffer(); sb.append("var f = new Array(2);\n"); sb.append("var C = 1.0;\n"); sb.append("var D = 0.1;\n"); sb.append("function rechteSeite(y,t)\n"); sb.append("{\n"); sb.append(" y = eval(y);\n"); sb.append(" f[0] = y[1];\n"); sb.append(" f[1] = -C*y[0]-D*y[1];\n"); sb.append(" return f;\n"); sb.append("}\n"); //Funktion und Parameter bereitstellen: try { engine.eval(sb.toString()); } catch(Exception e) { System.out.println(e); } //Rechte Seite über das Euler-Verfahren auswerten: NativeArray ff = null; double[] y = new double[] {1.0,0.0}; double[] rechteSeite = new double[] {0.0,0.0}; double t = 0.0; double dt = 0.05; for(int tt=0;tt<100;tt++) { try { ff = (NativeArray)( engine.eval("rechteSeite("+wandleArray(y)+","+t+")") ); } catch(Exception e) { System.out.println(e); } for(int i=0;i<ff.getLength();i++) rechteSeite[i] = Double.parseDouble( ff.get(i,null).toString() ); y[0]+=rechteSeite[0]*dt; y[1]+=rechteSeite[1]*dt; System.out.println(t+" "+y[0]); t+=dt; } } }
Code 0-3: Beschreibung eines DGLS als Skript und dessen Integration.
Übung
|
|
import java.io.*; public class Textladen { public static void main(String[] args) { if( !( new File("vorname.txt") ).exists() ) { BufferedReader pufferleser = new BufferedReader(new InputStreamReader( System.in )); System.out.println("Geben Sie bitte Ihren Vornamen ein (mit ENTER bestaetigen):"); try { speichern( pufferleser.readLine() ); } catch(IOException e) { } } try { FileReader meinLeser = new FileReader( new File("vorname.txt") ); StringBuffer puffer = new StringBuffer(); int zeichen = meinLeser.read(); while( zeichen!=-1 ) { puffer.append((char)zeichen); zeichen = meinLeser.read(); } System.out.println("Hallo "+puffer.toString()+"!"); meinLeser.close(); } catch(IOException e) { } } public static void speichern(String vorname) { try { PrintWriter meinPrinter = new PrintWriter( new FileWriter(new File("vorname.txt")) ); meinPrinter.print(vorname); meinPrinter.close(); } catch(IOException e) { } } }
Code 0-4: Klasse Textladen.