我的问题很简单,我将在下面发布代码: 我想在一个方法中创建一个名为result的StringBuilder,比如方法1,它被传递给另一个方法,比如方法2.然而,方法2是RECURSIVE并返回void。我想访问已被方法2的INSIDE修改的StringBuilder。但是正如预期的那样,我只获得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);
}
}
答案 0 :(得分:1)
1)它是可变的,你在方法2中附加它,但仅在某些条件下
确保满足这些条件。方法2可能永远不会去那个部分
它会向您传入的StringBuilder
附加一些内容。
2)调用方法2(方法1)后,请确保不要执行
results = new StringBuilder();
就像你现在一样。这样你就是
当你创建一个新对象时,放弃你在方法2中堆积的价值
我看到你在某种情况下再次这样做,但我不确定它是否有意。