我需要把下面这个有缺失的代码实现,
在这里,这个代码的构造函数是不完整的,如何合理的完成构造函数的填充
在完成构造函数部分之后,我需要在主函数中创建几个节点, 然后使用findChild方法来找到每个节点的名字。怎么把findChild函数填充完整,这样程序可以顺利进行下面是代码
package directory_explorer; import java.util.Map; import java.util.Collection; import java.util.HashMap; /** * The root of a tree representing a directory structure. */ public class FileNode { /** The name of the file or directory this node represents. */ private String name; /** Whether this node represents a file or a directory. */ private FileType type; /** This node's parent. */ private FileNode parent; /** * This node's children, mapped from the file names to the nodes. If type is * FileType.FILE, this is null. */ private Mapchildren; /** * A node in this tree. * * @param name * the file * @param parent * the parent node. * @param type * file or directory * @see buildFileTree */ public FileNode(String name, FileNode parent, FileType type) { this.name = name; // TODO: complete this method. } /** * Find and return a child node named name in this directory tree, or null * if there is no such child node. * * @param name * the file name to search for * @return the node named name */ public FileNode findChild(String name) { FileNode result = null; // TODO: complete this method. return result; } /** * Return the name of the file or directory represented by this node. * * @return name of this Node */ public String getName() { return this.name; } /** * Set the name of the current node * * @param name * of the file/directory */ public void setName(String name) { this.name = name; } /** * Return the child nodes of this node. * * @return the child nodes directly underneath this node. */ public Collection getChildren() { return this.children.values(); } /** * Return this node's parent. * * @return the parent */ public FileNode getParent() { return parent; } /** * Set this node's parent to p. * * @param p * the parent to set */ public void setParent(FileNode p) { this.parent = p; } /** * Add childNode, representing a file or directory named name, as a child of * this node. * * @param name * the name of the file or directory * @param childNode * the node to add as a child */ public void addChild(String name, FileNode childNode) { this.children.put(name, childNode); } /** * Return whether this node represents a directory. * * @return whether this node represents a directory. */ public boolean isDirectory() { return this.type == FileType.DIRECTORY; } /** * This method is for code that tests this class. * * @param args * the command line args. */ public static void main(String[] args) { System.out.println("Testing FileNode"); FileNode f1 = new FileNode("top", null, FileType.DIRECTORY); if (!f1.getName().equals("top")) { System.out.println("Error: " + f1.getName() + " should be " + "top"); } } }
public FileNode findChild(String name){ if(this.children!=null){ if(name!=null){ FileNode fileNode = null ; //此处每个节点 for (String key : children.keySet()) { if(key.equals(name)){ fileNode = children.get(key); } } return fileNode; }else{ return null; } }else{ return null; } }
public class FileNode { String name; FileNode parent; List<FileNode> children; FileNode(String name, FileNode parent, FileType type) { this.children = new ArrayList<>(); this.name = name; this.setParent(parent); } public void setParent(FileNode parent) { if (this.parent != null) { this.parent.children.remove(this); } this.parent = parent; this.parent.addChild(this); } public FileNode findChild(String name) { for (FileNode node : this.children) { if (node.name.equals(name)) { return node; } } return null; } public void addChild(FileNode node) { if (!this.children.contains(node)) { this.children.add(node); } } @Override public int hashCode() { return this.name.hashCode(); } @Override public boolean equals(Object obj) { if (obj instanceof FileNode) { FileNode node = (FileNode) obj; if (node.name.equals(this.name)) { return true; } } return false; } }
package test; import java.util.Map; import java.security.KeyStore.Entry; import java.util.Collection; import java.util.HashMap; /** * The root of a tree representing a directory structure. */ public class FileNode { /** The name of the file or directory this node represents. */ private String name; /** Whether this node represents a file or a directory. */ private FileType type; /** This node's parent. */ private FileNode parent; /** * This node's children, mapped from the file names to the nodes. If type is * FileType.FILE, this is null. */ private Map<String, FileNode> children; /** * A node in this tree. * * @param name * the file * @param parent * the parent node. * @param type * file or directory * @see buildFileTree */ public FileNode(String name, FileNode parent, FileType type) { this.name = name; this.parent = parent; this.type = type; } /** * Find and return a child node named name in this directory tree, or null * if there is no such child node. * * @param name * the file name to search for * @return the node named name */ public FileNode findChild(String name) { FileNode result = null; for(String str: children.keySet()) { if(str.equals(name)) { return children.get(str); } } return result; } /** * Return the name of the file or directory represented by this node. * * @return name of this Node */ public String getName() { return this.name; } /** * Set the name of the current node * * @param name * of the file/directory */ public void setName(String name) { this.name = name; } /** * Return the child nodes of this node. * * @return the child nodes directly underneath this node. */ public Collection<FileNode> getChildren() { return this.children.values(); } /** * Return this node's parent. * * @return the parent */ public FileNode getParent() { return parent; } /** * Set this node's parent to p. * * @param p * the parent to set */ public void setParent(FileNode p) { this.parent = p; } /** * Add childNode, representing a file or directory named name, as a child of * this node. * * @param name * the name of the file or directory * @param childNode * the node to add as a child */ public void addChild(String name, FileNode childNode) { this.children.put(name, childNode); } /** * Return whether this node represents a directory. * * @return whether this node represents a directory. */ public boolean isDirectory() { return this.type == FileType.DIRECTORY; } /** * This method is for code that tests this class. * * @param args * the command line args. */ public static void main(String[] args) { System.out.println("Testing FileNode"); FileNode f1 = new FileNode("top", null, FileType.DIRECTORY); if (!f1.getName().equals("top")) { System.out.println("Error: " + f1.getName() + " should be " + "top"); } } }