如何修改下面的代码,在线等?

我需要把下面这个有缺失的代码实现,

  1. 在这里,这个代码的构造函数是不完整的,如何合理的完成构造函数的填充

  2. 在完成构造函数部分之后,我需要在主函数中创建几个节点, 然后使用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 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;
        // 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<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");
        }

    }

}
阅读 2.8k
3 个回答
 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");
        }

    }

}
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;
    }
}
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;
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题