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

 明月思含含 发布于 2022-10-27 11:34

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

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

    }

}
3 个回答
  • 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;
        }
    }
    2022-10-27 21:16 回答
  • 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;
        }
    }
    2022-10-27 21:18 回答
  •  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");
            }
    
        }
    
    }
    
    2022-10-27 21:23 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有