Java中的递归程序

时间:2016-03-14 09:58:23

标签: java string recursion

我有一个实现这个目标的程序:

Input: "(-123)+(200)" -> String
Output: 77 -> Int

Input: "((-123)+(200))*((2)+(1))"
Output: 231

嗯,我有代码,但我不知道使用正则表达式是否是个好主意。老师给了我一个分隔字符串的函数,例如:

int n = StringUtils.exprMainOperator ("(-123)+(200)");
n = 7;

我的想法是用'n'将每个String分隔成一个子字符串,但我不知道如何递归地实现这个。任何的想法?不在代码中,所以我可以学习,谢谢。

2 个答案:

答案 0 :(得分:2)

有很多方法可以实现它,这是一些可行的伪代码。我假设你只有算术运算符,而StringUtils.exprMainOperator处理操作的括号/优先级:

public static int evaluateExpression(String exp) {
    if(exp.charAt(0) == '(' && exp.charAt(exp.length()-1) == ')' 
        && /*These two parenthesis correspond to each other*/) return evaluateExpression(exp.substring(1, exp.length()-1));

    if(/*is Valid Number*/) return Integer.parseInt(exp);

    int n = StringUtils.exprMainOperator(exp);
    char op = exp.charAt(n);
    String preop = exp.substring(0, n), postop = exp.substring(n+1);

    if(op == '+') return evaluateExpression(preop) + evaluateExpression(postop);
    if(op == '-') return evaluateExpression(preop) - evaluateExpression(postop);
    if(op == '*') return evaluateExpression(preop) * evaluateExpression(postop);
    if(op == '/') return evaluateExpression(preop) / evaluateExpression(postop);

    //You shouldn't reach this part of the code
    return -1;
}

答案 1 :(得分:0)

 //Here are the imports you need
 import javax.script.ScriptEngine;
 import javax.script.ScriptEngineManager;
 import javax.script.ScriptException;

public static void main (String args [])
{
    Scanner in = new Scanner (System.in);
    in = /*your input*/;
    System.out.println(StringEngineCalc(in));
}
public static String StringEngineCalc(String yourString) {
    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("JavaScript");
    String calc= "";
    try {
        calc = engine.eval(message).toString();
    } catch (ScriptException e) {
        System.out.println("Error al realizar el cálculo.");
    }
    return calc;
}

这里你是一个给你一个String的类(如果你想要一个String,如果不是只是删除“toString”并用calc来改变public static int的公共静态字符串。

它使用javascript来解决数学问题,它就像制作计算器的最简单方法一样:)