递归Java调用中的空结果

时间:2016-06-23 16:23:17

标签: java recursion

我正在处理以下CodingBat problem

  

给定一个包含一对括号的字符串,递归计算一个由括号及其内容组成的新字符串,因此" xyz(abc)123"收益率"(abc)"。

parenBit("xyz(abc)123") → "(abc)"
parenBit("x(hello)") → "(hello)"
parenBit("(xy)1") → "(xy)"

我试图像这样解决它:

import java.util.LinkedList;
import java.util.List;

public class ParenBit {
    public static void main(String arg[]) {
        ParenBit p = new ParenBit();
        p.solve(arg[0], '(', "");
        System.out.println(p.finalResult.toString());
    }

    private List<String> finalResult = new LinkedList<String>();

    private boolean solve(String s, char c, String result) {
        if (s.length() == 0)
            return false;
        char f = s.charAt(0);
        if (f == '(') {
            boolean b = solve(s.substring(1), ')', result);
            if (b) {
                result += f + "";
            }
            if (f == c)
                return true;
        } else if (f == ')') {
            if (c == f) {
                result += f + "";
                finalResult.add(result);
                solve(s.substring(1), '(', "");
                return true;
            }
        } else {
            if (c == ')') {
                boolean b = solve(s.substring(1), ')', result);
                if (b) {
                    result += f + "";
                }
            } else if (c == '(') {
                return solve(s.substring(1), '(', result);
            }
        }
        return false;
    }
}

当我用这个输入调用它时:

  

哇(论文)

我得到空的结果。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

当我将代码粘贴到IDE中时,它会告诉我

if (b) {
    result += f + "";
}

分配给&#39; f + ""&#39;的值result从未使用过。

这意味着您更新了result参数,但从未使用更新后的值,因此您始终使用 solve()参数调用result方法。< / p>

答案 1 :(得分:0)

您的代码已更新。 鉴于你的代表你应该能够把它想出来。

此外,如果您需要正确获取结果,则不应该使用List。简单的字符串就可以了。

更多输入。相反,简单的代码尝试遵循给出的指令。 CodingBat期待你编写一个返回String的方法,而不是编写一个程序来将输出存储在变量中。

private String finalResult = "";

private boolean solve(String s, char c, String result) {
    if (s.length() == 0)
        return false;
    char f = s.charAt(0);
    if (f == '(') {
        result="(";
        boolean b = solve(s.substring(1), ')', result);
        if (b) {
            result += f + "";
        }
        if (f == c)
            return true;
    } else if (f == ')') {
        if (c == f) {
            result += f + "";
            finalResult = result;
            //finalResult.add(result);
            solve(s.substring(1), '(', "");
            return true;
        }
    } else {
        if (c == ')') {
            result += f + "";
            boolean b = solve(s.substring(1), ')', result);
            /*if (b) {
                result += f + "";
            }*/
        } else if (c == '(') {
            return solve(s.substring(1), '(', result);
        }
    }
    return false;
}

答案 2 :(得分:0)

private boolean solve(String s, char c, String result) {

  int bpos = s.lastIndexOf(c);
  int epos = s.indexOf(')');

  if ((bpos == -1) || (epos == -1) || (epos < bpos)) {
      return false;
  }

  result = s.substring(bpos,++epos);
  finalResult.add(result);

  return true;
}