1

コマンドラインで値を出力する再帰的な方法があります。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 つしかなく、後で再利用できます。

4

1 に答える 1

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]);
}

サイズが不明な場合、配列は面倒なので、これには aListの方が適しています。

于 2013-02-23T17:45:16.700 に答える