下面的输出是不同的。我不知道哪里出了问题,我已经多次尝试纠正。 有File和Folder两个java文件。对于格式,对于列出的文件夹,末尾必须有一个“/”,对于每个文件夹/文件,路径必须是绝对路径。
输出必须是
dir1/
dir1/f1/
dir1/dir2/
dir1/dir2/f3/
dir1/dir2/f4/
dir1/dir2/dir3/
dir1/dir2/dir3/f5/
dir1/f2/
但是,我的输出是
dir1/
dir1/f1/
dir1/dir2/
dir2/f3/
dir2/f4/
dir2/dir3/
dir3/f5/
dir1/f2/
这是我的代码。
public class File implements Composite {
public String name;
//private ArrayList<File>a=new ArrayList<File>();
public File(String name)
{
this.name=name;
}
public void list() {
System.out.print(name+"/");
System.out.println();
}
}
文件夹.java
import java.util.ArrayList;
public class Folder implements Composite{
public String name;
public ArrayList b = new ArrayList();
public Folder(String name){
this.name=name;
}
public void add(Object o)
{
b.add(o);
}
public void list(){
int e=b.indexOf(name)+1;
System.out.println(name+"/");
Composite r=(Composite) b.get(e);
for(int i=0;i<b.size();i++) {
System.out.print(name+"/");
Composite a=(Composite)b.get(i);
a.list();
}
}
public String getName(){
return name;
}
}
最佳答案
在代码中,您需要跟踪每个文件夹
的父文件夹。
因此构造函数需要是Folder(Folder Parent, String name)
。根(最顶层)文件夹将 null
作为父文件夹。
当您打印名称时,您需要询问当前文件夹的路径。此方法的代码为:
public String getPath() {
if(null == parent) return name;
return parent.getPath() + "/" + name;
}
关于java 组合设计模式(目录&文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27108326/