如何在传递它的原始方法中访问修改后的StringBuilder

时间:2014-04-12 20:30:18

标签: java recursion stringbuilder mutability

我的问题很简单,我将在下面发布代码: 我想在一个方法中创建一个名为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);
    }
}

1 个答案:

答案 0 :(得分:1)

1)它是可变的,你在方法2中附加它,但仅在某些条件下 确保满足这些条件。方法2可能永远不会去那个部分 它会向您传入的StringBuilder附加一些内容。

2)调用方法2(方法1)后,请确保不要执行 results = new StringBuilder();就像你现在一样。这样你就是 当你创建一个新对象时,放弃你在方法2中堆积的价值 我看到你在某种情况下再次这样做,但我不确定它是否有意。