递归Java调用中的空结果

我正在处理以下CodingBat问题 :

给定一个包含一对括号的字符串,递归计算一个由括号及其内容组成的新字符串,因此“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 finalResult = new LinkedList(); 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; } } 

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

哇(论文)

我得到空洞的结果。 我怎样才能解决这个问题?

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

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

从不使用赋给’ result ‘的值f + ""

这意味着您更新result参数,但从不使用更新的值,因此您总是使用 result参数调用solve()方法。

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

此外,如果您需要正确获取结果,您不应该使用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; } 
 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; }