【问题标题】:Recursive program in Java [closed]Java中的递归程序[关闭]
【发布时间】:2016-03-14 09:58:22
【问题描述】:

我有一个程序可以实现这一点:

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

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

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

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

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

【问题讨论】:

  • 如果没有像 "123" 这样的运算符,StringUtils.exprMainOperator 会返回什么
  • return string.length();在这种情况下是 3;
  • StringUtils.exprMainOperator 是否考虑括号和操作的优先级?
  • 是的,例如这个 String int n = StringUtils....((-123)+(200))*((2)+(2)); n = 14,此方法将等价括号中的表达式分开。

标签: java string recursion


【解决方案1】:

有很多实现它的方法,这是一些可行的伪代码。我假设您只有算术运算符,并且 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;
}

【讨论】:

  • 我有一个问题,我有错误:missin return statment,但我不知道我有 return...?
  • 您必须在方法末尾添加return 语句,因为编译器会看到所有return 语句都在if 语句中。
【解决方案2】:
 //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;
}

这里是一个类,它通过计算返回一个字符串(如果你想要一个字符串,如果不只是删除“toString”并将公共静态字符串更改为公共静态 int)。

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

【讨论】:

    猜你喜欢
    • 2022-07-17
    • 2020-10-27
    • 2018-08-07
    • 1970-01-01
    • 2023-04-09
    • 2018-12-31
    • 2016-09-12
    • 1970-01-01
    • 2013-11-05
    相关资源
    最近更新 更多