我的迷你文件系统出现问题,我正在创作作业。当前的分配是实现操作查找,它基本上找到了你发送的名称的文件夹或文件。当我遍历它的父母时,我不行,但是当我试图从中获取路径时,棘手的部分是directorys /文件夹,指向目标目录/文件或某个目标的目录。
Ex:Directorys / a / b / c(/ c是目标)和directorys / d / e,现在如果/ e或/ d指向/ b或/ c它工作正常,但当我指向/ d到/ a输出为:/ d / a / c。它通过/ b执行。有关如何解决此问题的任何提示?
更新了这个,以便它通过目标父项,直到它到达被指向的父项并且它转到指针并通过它的父项。但是现在它正在抛出一个IndexOutOfBoundsException。
MiniFs类:
package se.kth.id1020.minifs;
import edu.princeton.cs.introcs.StdOut;
import java.util.ArrayList;
import java.util.HashMap;
public class MiniFs implements FileSystem {
private final INodeDirectory root;
private HashMap<String,Integer> map = new HashMap<String, Integer>();
private int n = 0;
private ArrayList<INodeDirectory> directoryNodes = new ArrayList<INodeDirectory>();
private ArrayList<INodeFile> fileNodes = new ArrayList<INodeFile>();
private HashMap<String, INodeDirectory> pointer = new HashMap<String, INodeDirectory>();
public MiniFs() {
root = new INodeDirectory("/");
map.put("/",n);
}
@Override
public void find (String target){
if(!map.containsKey(target)){
StdOut.println(target + " does not excist!");
}
else if(target.endsWith(".txt")){
INodeFile targetNode = new INodeFile(target);
int index = fileNodes.indexOf(targetNode);
INodeDirectory parent = fileNodes.get(index).getParent();
ArrayList<String> path = new ArrayList<String>();
ArrayList<String> links = new ArrayList<String>();
path.add(root.getName());
int cnt = 1;
while(parent != root){
path.add(parent.getName());
links.add(parent.getName());
path.add("/");
index = directoryNodes.indexOf(parent);
parent = directoryNodes.get(index).getParent();
cnt++;
}
path.add(target);
for(int i = 0; i < path.size(); i++){
if(i > 0 && i < path.size()-1){
StdOut.print(path.get(cnt));
cnt--;
}
else{
StdOut.print(path.get(i));
}
}
StdOut.println();
path.clear();
int targetIndex = fileNodes.indexOf(targetNode);
for(int i = 0; i < links.size(); i++){
parent = fileNodes.get(targetIndex).getParent();
StdOut.println("Parent: " + parent.getName());
path.add(root.getName());
cnt = 1;
while(parent.getName() != links.get(i)){
path.add(parent.getName());
path.add("/");
index = directoryNodes.indexOf(parent);
parent = directoryNodes.get(index).getParent();
StdOut.println("Parent W: " + parent.getName());
cnt++;
}
path.add(links.get(i));
path.add("/");
cnt++;
parent = pointer.get(links.get(i));
while(parent != root){
StdOut.println("Parent W2: " + parent.getName());
path.add(parent.getName());
path.add("/");
index = directoryNodes.indexOf(parent);
parent = directoryNodes.get(index).getParent();
cnt++;
}
path.add(target);
StdOut.println("Path size: " + path.size() + " cnt: " + cnt);
for(int j = 0; j < path.size(); j++){
if(j > 0 && j < path.size() - 1){
StdOut.print(path.get(cnt)); <---- IOOB thrown here
cnt--;
}
else{
StdOut.print(path.get(j));
}
}
path.clear();
StdOut.println();
}
}
}
答案 0 :(得分:0)
通过
找到解决方案int x = path.size() - 3;
for(int j = 0; j < path.size(); j++){
if(j > 0 && j < path.size() - 1){
StdOut.print(path.get(x));
x--;
}
else{
StdOut.print(path.get(j));
}
}