0

Java の math のような既存のパッケージを使用せずに、sine、MCM などのさまざまな関数を計算するプロジェクトを作成しました。ユーザーから文字列の形式で式を取得し、結果を次の
ように出力したいと考えています。

import java.util.Scanner;

public class Phase2main {

public static void main(String[] args) {

    Scanner s = new Scanner(System.in);
    String expression   ;
    double result = 0 ;

    System.out.println(" Enter your desired expression from the available functions ");

    expression = s.nextLine();


    System.out.println("Result is : " + result);                
 }
}

次のように実行する必要があります: 式を入力してください: ADD(DIV(SIN(FACT(3)),CEIL(TAN(MUL(1.5,FIB(4))))),GCD(2,10)) 結果は: 1.94

CEIL などの関数とその入力を識別するプログラムを作成するにはどうすればよいですか? 同様の質問の多くを確認しましたが、見つけたものはかなり複雑すぎて、関数とその入力を特定せずに基本的な算術を理解または実行できないライブラリです。

では、この特定の問題のための簡単なエバリュエーターを作成するにはどうすればよいでしょうか?

4

3 に答える 3

1

JavaScriptインタープリターを使用できますか?

最初にエンジン インスタンスを作成して初期化します。

// Manager creates engines by mime/language names.
// It has own global scope for engiges created by it.
ScriptEngineManager manager = new ScriptEngineManager();
// Create JavaScript interpreter instance.
// (Nashorn is bundled JavaScript interpreter)
ScriptEngine scope = manager.getEngineByName("JavaScript");
// Define functions you need
String initialScript = "cos = Math.cos;" // ; or \n
    + "sin = Math.sin;"
    + "tg  = Math.tan;"
    + "PI  = Math.PI;"
// Any other function
    + "ctg = function (x) { return cos(x)/sin(x); };";
// ...

try {
    // Add these functions to scope
    scope.eval(initialScript);
} catch(ScriptException ex) {
    // Evaluating exceptions, syntax errors are thrown here
}

そして、「スコープ」内の式を何度も評価できます。

try {
    double d = (double)scope.eval("sin(PI/2) + cos(PI/2)");
    System.out.println("Calculated: " + d);
} catch(ScriptException e) {
    // ...
}

注意:

  1. 言語通訳があります-ユーザーは任意のスクリプトを渡すことができます...
  2. ... アプリケーションのパフォーマンスを低下させる可能性があります。

たとえば、JythonJRubyをインタープリターとして使用することもできます。

于 2014-12-05T15:45:00.830 に答える
0

ライブラリを使用せずに一般的な入力式を識別して評価する簡単な方法があるかどうかはわかりません。

数式を評価する独自の方法を開発したい場合は、このページをご覧ください。http: //cogitolearning.co.uk/ ?p=565

気が変わってライブラリを使用したい場合は、次のリンクを確認してください: Evaluating a math expression given in string form

Javaコンパイラを構築したときにこれを行ったので、式を読み取って評価できましたが、単純ではありませんでした...

于 2014-12-05T15:53:18.173 に答える
0

Java Scripting API を使用できます。たとえば、JavaScript や BeanShell (java のようなもの) を使用できます。

    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByMimeType("text/javascript");
    try {
        engine.eval("print('Result: ' + java.lang.Math.sin(0.8))");
        double y = ((Number) engine.eval("java.lang.Math.sin(0.8)")).doubleValue();
    } catch (ScriptException ex) {
        Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
    }

JavaScript はインポートを使用できます。ご覧のとおり、Java の呼び出しは非常に簡単です。

于 2014-12-05T15:43:06.940 に答える