我有一个函数需要在完成某些操作时返回一个值。我不会厌倦你的细节。 我的函数调用自身,所以它是递归的。现在,当我从elswhere调用它时,我想能够获得此函数的结果值。 所以这是代码:
public int compute(string[] myarray)
{
if (hasParantesisBlock)
{
// do stuff
// remove paranthesis block from myarray
String[] newArray = removeBlockFromArray(myarray);
// recursive call
compute(newArray);
}
else
{
// do other stuff obtaining a value
return value;
}
return 0; // if I remove this I get error
}
我称之为:
int myval = compute(myStringArray);
我有一个字符串数组,我想从myStringArray中删除括号中的块。我在我的函数计算中这样做,直到那里没有更多的括号块。当发生这种情况时,我想对字符串数组的元素进行计数(例如,不是一个好例子),我想在主代码中返回该值。
由于最后一次“返回0;”,我总是收到0.但如果我从递归方法中显示结果(值)......我得到了正确的值。
如果我的字符串数组中有2个圆括号,那么我将获得2个ZERO值,如果我有3个块,那么我将获得3个ZERO结果....
我不希望那些ZERO结果。我只想返回字符串Array中没有剩余块时获得的值。
所以步骤是这样的:
- does it have a block?
- yes. remove block and recall with changed array
- does it have a block?
- yes. remove block and recall with changed array
- does it have a block?
- no. RETURN my value (!!! this is the only return I want to receive)
- standard return
- standard return
我该怎么做?
答案 0 :(得分:2)
彼得说,
删除返回0;而是返回compute(newArray)的值。
(不能评论,因为我没有足够的代表)。
public int compute(string[] myarray)
{
if (hasParantesisBlock)
{
// do stuff
// remove paranthesis block from myarray
String[] newArray = removeBlockFromArray(myarray);
// recursive call
return compute(newArray);
}
else
{
// do other stuff obtaining a value
return value;
}
}
没有查看整个代码我可以看到一些可能的陷阱。比如不使用方法中的返回值。如在
return compute(newArray)++;