1

これまでのところ、文字列を加算、減算、および乗算するevaluateメソッドがあります (例: "5*5")。ただし、1 桁を 3 桁 ("5*10") で評価しようとすると、"50" ではなく "5" が返されます。私の問題は、2桁の最初の文字列のみを取得し、それに応じて評価していることだと思います。何か案は?

これが私のコードです:

public double evaluate(String exp){
        String left = "";
        String right = "";
        double leftValue = 0;
        double rightValue = 0;
        double answer = 0;
        //ensures expression matches an appropriate expression (i.e. 2+2, not "2"
        if(exp.length()==1)
        {
            //if single digit, return double value
            return Double.parseDouble(exp);
        }
        //searching for a "+"
        for(int i=0;i<exp.length();i++)
        {
            if(exp.charAt(i)=='+')
            {
                right = exp.substring(i+1, exp.length());
                leftValue = subtract(left);
                rightValue = evaluate(right);
                answer = leftValue + rightValue;
                return answer;
            }   
            else
            {
                left = left + exp.substring(i,(i+1));

            }

        } // End for loop
        answer = subtract(exp);
        return answer;
    } // End evaluate method

    // Guaranteed there are no addition operators in exp 
    public double subtract(String exp){
        String leftString = "";
        String rightString = "";
        double leftValue = 0;
        double rightValue = 0;
        double answer = 0;

        for(int i=exp.length()-1;i>=0;i--)
        {
            if(exp.charAt(i)=='-')
            {
                // Convert rightString into Double
                rightValue = Double.parseDouble(rightString);
                leftString = exp.substring(0,i);
                leftValue=subtract(leftString);
                answer = leftValue - rightValue;
                return answer;
            }   
            else
            // Accumulating the right string
            {
                rightString = rightString + exp.substring(i,(i+1));
            }
        } // End for loop
        answer= multiply(exp);

        return answer;

...then the code goes onto multiplication, etc....

    } // End evaluate method
4

2 に答える 2

4

ScriptEngine クラスを使用して、JavaScript 文字列として評価できます。

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");        
Object result = engine.eval("5*10");
于 2013-05-24T15:17:43.610 に答える
0

メソッドでは、文字列を「後方に」subtract「構築」します。つまり、 = 5に変換します。 おそらく、次のように変更する必要があります。rightString5*1001*5

// Accumulating the right string
{
    rightString = rightString + exp.substring(i,(i+1));
}

これに:

// Accumulating the right string
{
    rightString = exp.substring(i,(i+1)) + rightString;
}
于 2013-05-24T15:17:59.993 に答える