1

我的工作是:

将 Node 类修改为通用类,以便它可以处理文件系统中的文件夹和文件,如下所示。

并且:

首先,您需要修改 Node 类,以便将“大小”和“名称”都替换为一个对象。

现在,我做了第一部分,我们将类更改为使用泛型类型。我被困在第二个问题上。我不知道如何传递单个对象而不是 2 个变量,然后在其中进行大量计算。

我如何在这里用多个变量替换单个对象?我一直在尝试更改类型并四处移动,但是一旦删除这两个变量,我的代码就会一直失败。

代码:

class Node<T>
   {
   public String name;
   public int size;
   public Node<T> leftChild;
   public Node<T> rightChild;

   public void displayNode()
      {
      System.out.print('{');
      System.out.print(name);
      System.out.print(", ");
      System.out.print(size);
      System.out.print("} ");
      }
   }  // end class Node
4

2 回答 2

2

我会像这样重新设计它:

class Node<T> {
    public T data;
    public Node<T> leftChild;
    public Node<T> rightChild;

    public void displayNode() {
        System.out.print('{');
        System.out.print(data.toString());
        System.out.print("} ");
   }
   . . .
}

编辑重写方法的find一种方法是让它找到一个特定的T值:

public Node<T> find(Comparable<T> target) {
    Node<T> current = root;
    int comp = target.compareTo(current.data);
    while (comp != 0) {
        if (comp < 0)
            current = current.leftChild;
        else
            current = current.rightChild;
        if(current == null)
            return null;
    }
    return current;
}
于 2012-11-06T05:40:49.483 回答
1

您需要创建一个Custom Data Class. 该类会将您所需的变量包装为属性。

例如,在您的情况下: -

public class MyData {
    private String name;  // Your data are enclosed in the data object MyData
    private int size;

    /** Constructors **/
    /** Getters and Setters **/
}

现在,无论您在哪里使用这些变量,都可以使用此类的一个实例。并且您的通用类将根据@TedHopp 的回答进行更改。

你的Node类将像这样被实例化: -

Node<MyData> node = new Node<MyData>();

因此,您的Tnow 变为MyData. 所以,如果你想访问sizeand name,你必须这样做: -

node.getMyData().getSize();
node.getMyData().getName();
于 2012-11-06T05:49:48.280 回答