我的问题很简单,我将在下面发布代码:我想在一个方法中创建一个名为 results 的 StringBuilder,比如方法 1,然后将其传递给另一种方法,比如方法 2。但是方法 2 是 RECURSIVE 并返回 void。我想访问已被方法 2 修改的 StringBuilder,在方法 1 的内部。但是正如预期的那样,我只得到 StringBuilder 的原始值...如何获得新的修改值?据我了解, StringBuilder 是可变的,不是吗?
public String dFSearch(PathExtremities pE)
{
for (int i = 0;i < vertices.length;i++)
{
vertices[i].reset();
}
Stack<Integer> stack = new Stack<Integer>();
stack.push(vertices[pE.getStart()].visit());
StringBuilder results = new StringBuilder();
results.append(pE.getStart() + ",\t");
dFSearch(pE.getEnd(),stack,results);
if ('\t' == results.charAt(results.length() - 1));
{
results = new StringBuilder();
results.append(Integer.toString(pE.getStart()) + ",\t-1,\t" + Integer.toString(pE.getEnd()));
}
String rslts = results.toString();
return rslts;
}
private void dFSearch(int end,Stack<Integer> stack,StringBuilder results)
{
if(stack.empty()) {return;}
int current = stack.peek();
int currentSmallest = ARBITRARY_LARGE;
for (int i = 0;i < adjacency[0].length;i++)
{
if(adjacency[current][i] == 1 && i < currentSmallest && !vertices[i].hasBeenVisited())
{
currentSmallest = i;
}
}
if(currentSmallest == ARBITRARY_LARGE)
{
stack.pop();
dFSearch(end,stack,results);
} else
{
if(currentSmallest == end)
{
results.append(Integer.toString(currentSmallest));
stack.removeAllElements();
} else
{
results.append(currentSmallest + ",\t");
stack.push(vertices[currentSmallest].visit());
}
dFSearch(end,stack,results);
}
}