[英]java Composite design pattern(Directory &File)
以下輸出是不同的。 我不知道怎么了,我已經嘗試了很多次。 有兩個文件和文件夾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();
}
}
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
。
因此,構造函數必須為Folder(Folder parent, String name)
。 根(最頂層)文件夾的父級為null
。
打印名稱時,需要詢問當前文件夾的路徑。 該方法的代碼為:
public String getPath() {
if(null == parent) return name;
return parent.getPath() + "/" + name;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.