所以我为我的通用树和随之而来的Node类创建了一个类。课程如下:
public class DirectoryTree<E> implements Serializable {
protected Node<E> root;
protected Node<E> child;
public DirectoryTree() {
root = null;
}//end constructor
protected DirectoryTree(Node<E> root) {
this.root = root;
}
public boolean isLeaf() {
return root.children == null;
}
public DirectoryTree<E> getTree() {
if (root != null) {
return new DirectoryTree<E>(root);
}//end if
else {
return null;
}//end else
}
public Node<E> getRoot() {
return root;
}
public Node<E> getChild() {
return child;
}
public String toString() {
return null;
}//end toString()
}
class Node<E> implements Serializable {
protected Node<E> parent;
protected E data;
protected ArrayList<Node<E>> children;
public Node(E data) {
this.data = data;
children = new ArrayList<Node<E>>();
}
public Node<E> getParent() {
return parent;
}
public ArrayList<Node<E>> getChildren() {
return this.children;
}
public int getNumberOfChildren() {
return getChildren().size();
}
public boolean hasChildren() {
return getChildren().size() > 0;
}
public void addChild(Node<E> child) {
int counter = 0;
for (int i = 0; i < children.size(); i++) {
if (child == children.get(i)) {
System.out.println("directory exists");
counter++;
}
}
if (counter == 0) {
children.add(child);
} else {
}
}
public E getData() {
return this.data;
}
public String toString() {
return data.toString();
}
}
我想知道我的2个类是否为通用树正确设置了。 另外,我不知道如何将这个树实现到程序中。我的程序应该是一个创建目录和文件并将它们放在树中的程序。我的根目录必须命名为/。到目前为止,我的主要课程是(我刚刚开始):
public class Driver {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Welcome to Fake Unix");
System.out.print("$");
File f = new File("//");
String input = in.nextLine();
DirectoryTree tree = new DirectoryTree(new Node<File>(f));
while (!input.equalsIgnoreCase("exit")) {
String[] command = input.split(" ");
if (command[0].equals("mkdir") && command[1].equals("-p") && command.length == 3) {
File f1 = new File(command[2]);
tree.root.addChild(new Node<File>(f1));
System.out.println("complete");
}//end if
if (input.equals("tree")) {
System.out.println(tree.toString());
}
System.out.print("$");
input = in.nextLine();
}//end while
}//end main
}//end class
所以我基本上要问的是我的方法在我的树和节点类中是否正确,以及我是否正朝着在主类中实现它们的正确方向前进。我正确创建目录还是我的语法错误?
感谢。
答案 0 :(得分:0)
我假设您希望在文件系统上创建目录。有些挖掘File
javadocs表示您需要为要添加的每个目录调用file.mkdir()
。
就课程而言:
protected Node<E> child
中的DirectoryTree
没有任何用处。你有根,如果这就是树将要保存的东西,你可以通过该节点导航到任何孩子。protected Node<E> parent
中设置Node
。如果您需要从子元素向上导航树,这将是有用的 - 您基本上需要实现Doubly linked list Node
访问DirectoryTree
的成员变量(请参阅isLeaf()
方法)。使用Node
上的getter,例如Node#getChildren()