1

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

1 回答 1

1

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

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

于 2014-04-12T20:35:35.927 回答