如何在java中的递归函数中创建数组

时间:2013-02-23 17:16:41

标签: java arrays swing recursion

我有一个递归方法,可以在命令行中打印出值。我需要创建一个临时数组,其结果是使用Swing显示它。如何创建数组并在每次循环时存储值?

static void listSnapshots(VirtualMachine vm)
    {
        if(vm == null)
     {
        JOptionPane.showMessageDialog(null, "Please make sure you selected existing vm");
        return;
     }

    VirtualMachineSnapshotInfo snapInfo = vm.getSnapshot();
    VirtualMachineSnapshotTree[] snapTree = snapInfo.getRootSnapshotList();
    printSnapshots(snapTree);
}

static void printSnapshots(VirtualMachineSnapshotTree[] snapTree)
{
    VirtualMachineSnapshotTree node;
    VirtualMachineSnapshotTree[] childTree;

    for(int i=0; snapTree!=null && i < snapTree.length; i++)
    {
        node = snapTree[i];
        System.out.println("Snapshot name: " + node.getName());
        JOptionPane.showMessageDialog(null, "Snapshot name: " + node.getName());
        childTree = node.getChildSnapshotList();

        if(childTree != null)
        {

            printSnapshots(childTree);
        }
    }//end of for

所以我没有JOptionPane,只有一个带有名称列表的窗口,可以在以后重复使用。

1 个答案:

答案 0 :(得分:3)

递归构建内容的一般策略是使用Collecting Parameter

这可以通过以下方式应用于您的情况:

static List<String> listSnapshotNames(VirtualMachineSnapshotTree[] snapTree) {
    ArrayList<String> result = new ArrayList<String>();
    collectSnapshots(snapTree, result);
    return result;
}

static void collectSnapshots(VirtualMachineSnapshotTree[] snapTree, List<String> names)
{
    VirtualMachineSnapshotTree node;
    VirtualMachineSnapshotTree[] childTree;

    for(int i=0; snapTree!=null && i < snapTree.length; i++)
    {
        node = snapTree[i];
        names.add(node.getName());
        childTree = node.getChildSnapshotList();

        if(childTree != null)
        {

            collectSnapshots(childTree, names);
        }
    }//end of for
}

当然,如果你真的想要它在一个数组中,你可以在之后转换它:

static String[] getSnapshotNames(VirtualMachineSnapshotTree[] snapTree) {
    List<String> result = listSnapshotNames(snapTree);
    return result.toArray(new String[0]);
}

对于未知大小,数组很痛苦,因此List可以更好地完成此任务。