每个文件夹
都有消息
列表,每个文件夹
可以有其子文件夹
列表和列表它自己的消息
。我正在努力解决递归函数,它需要从传递给该函数的任何节点 Folder
返回 Message
对象的计数。这里有类和一些插入的虚拟日期以形成一棵树。
如果我是对的,这与 Java 的文件和文件夹系统不同。这里,Message
不能是Folder
,因此不存在Java的isDirectory()
public class Folder {
private Folder parent;
private ArrayList<Message> mMessages;
private ArrayList<Folder> children;
public Folder(){
this(null, new ArrayList<Folder>(), new ArrayList<Message>());
}
public Folder(Folder parent, ArrayList<Folder> children) {
this.parent = parent;
this.children = children;
}
public Folder(Folder parent, ArrayList<Folder> childrens, ArrayList<Message> messages ) {
this.parent = parent;
this.children = childrens;
this.mMessages = messages;
}
public boolean hasChildren(){
return this.getChildren().size() > 0;
}
public void addChildren(Folder child) {
child.setParent(this);
this.getChildren().add(child);
}
public void addMessage(Message message) {
this.getMessages().add(message);
}
public boolean isRoot() {
return parent == null;
}
}
以下是虚拟数据:
Message m1 = new Message();
Message m2 = new Message();
Message m3 = new Message();
//main root
Folder root = new Folder();
//root's folder children
Folder level1a = new Folder(); level1a.addMessage(m1);
Folder level1b = new Folder(); level1b.addMessage(m2);
Folder level1c = new Folder(); level1c.addMessage(m3);
//adding children to root
root.addChildren(level1a); root.addChildren(level1b); root.addChildren(level1c);
//adding children to level 1a
Folder level1aa = new Folder();
level1a.addChildren(level1aa);
//adding messages to level 1aaa and 1aab
Folder level1aaa = new Folder(); level1aaa.addMessage(new Message());
Folder level1aab = new Folder(); level1aab.addMessage(new Message());
//adding children (level1aaa and level1aab) to its parent level1aa
level1aa.addChildren(level1aaa);
level1aa.addChildren(level1aab);
这就是我所拥有的。这是不正确的,每添加一个新级别,如果将 root
传递给函数,我就会多获得一个额外的 count
。但是,如果我从叶和根之间的任何级别传递一些节点 Folder
,我会得到正确的结果。我还尝试使用调试器,慢慢地,像讲座中那样编写堆栈帧。但我似乎无法全神贯注于此。
public static int numberOfMessages(Folder folder){
int count = 0;
count+= folder.getMessages().size();
for (Folder child : folder.getChildren()) {
if (child.hasChildren()) {
count += numberOfMessages(child);
}
count += child.getMessages().size();
}
return count;
}
据我所知,当它开始返回调用时,level1a 的
Message
似乎被计数了两次。我不知道为什么。我将不胜感激任何帮助。
最佳答案
其实我刚才就想到了这个。如果有人可以验证或尝试建议我如何改进它。
public static int numberOfMessages(Folder folder){
int count = 0;
for (Folder child : folder.getChildren()) {
count += numberOfMessages(child);
}
return count + folder.getMessages().size();
}
关于java - 使用Java递归计算父子关系文件夹中的消息数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61171036/