0

入力した合計を計算できる電卓を作ろうとしています。

例:

私はこのようなことを試しました...

import java.util.*;

public class Calc {

String sum; 


     public static void main(String[]args){

            Scanner sum = new Scanner(System.in);

            System.out.println("Please enter a sum: ");

            double newsum = Integer.parseInt(sum);  

            sum.close();               

            System.out.println(newsum);

     }

}
4

6 に答える 6

3

すべてを文字列式に変換したら、組み込みの JavaScript エンジンを使用して式を評価できます。

import java.util.Scanner;
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;

public class Example {
    public static void main(String[] args) throws Exception {
        System.out.println("Please enter an expression: ");
        String toEval = new Scanner(System.in).next();
        ScriptEngineManager mgr = new ScriptEngineManager();
        ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
        System.out.println(jsEngine.eval(toEval));
    }
}
于 2012-12-24T15:00:59.753 に答える
1

そのためにANTLRを使用できます。サンプル電卓はこちらにあります

編集

ANTLR を使用すると、括弧の使用、いくつかの計算方法 (round、sin、cos など) など、将来さらに多くの機能を非常に簡単に追加できるようになります。

于 2012-12-24T14:59:06.827 に答える
0

これは簡単な質問ですが、答えは少し複雑です。式の文法に関する仮定がなければ、このような式を解析することはできません。インフィックス/ポストフィックス/プレフィックスですか。ブラケットを使用していますか?足し算は交換可能ですか?乗算は左右結合ですか? * と + 記号の実際の意味は何ですか?

電卓を作成する際には、何十もの決定を下す必要があるため、Java プログラミング言語には、すぐに使用できる評価サポートがありません。標準的な意味で操作したい場合は、いくつかのライブラリを使用してください。非標準の動作をしたい場合は、独自の文法を記述してください。ブラケットを使用する場合は、おそらくLL1 grammarと組み合わせて、 pull-push オートマトンを実装する必要があります。

しかし、あなたがこの種の質問をしているとき、私はあなたが Java とプログラミングにまったく慣れていないと思います。オートマトンと文法の理論からいくつかの基本が必要です。

私が自分でJavaを学んでいたとき、私もこの問題に遭遇し、プログラムをWindows電卓として入力することで解決しました。プログラムには、現在の結果を集計するレジスタが 1 つ含まれており、各操作の後、プログラムはユーザーに次の結果を問い合わせました (非常に単純なパーサーを使用してこれを行うこともできますが、電卓は演算子の優先度を認識しないことに注意してください)。

于 2012-12-24T16:10:26.037 に答える
0

あなたがどれだけ Java に精通しているかはわかりませんが、楽しみ、学習、最善の解決策を探すために Java を試しているのであれば、デザイン パターンを検討する価値があるかもしれません: つまり、このデザイン パターン: http://sourcemaking.com/ design_patterns/interpreter 少なくとも楽しみのために

于 2012-12-24T15:06:53.047 に答える