我对以下方法有点麻烦。
我想打印出目录中的文件,并从单独的主类中调用此方法。
虽然这确实有效,但它只打印出第一个文件然后停止。
public String viewDir(String user){
LinkedList<String> fileNameList = new LinkedList<>();
File actual = new File("c:\\Server\\" + user + ".");
for( File f : actual.listFiles()){
System.out.println(f.getName());
fileNameList.add(f.getName());
}//end of advanced for loop
for(int j = 0; j < fileNameList.size(); j++){
return fileNameList.get(j);
}//end of for loop
return null;
}
我使用以下方法调用上述方法:
System.out.println(fileInterface.viewDir(user) + "\n\n");
答案 0 :(得分:1)
在第二个循环中调用return
意味着循环和整个方法终止。列表的第一个元素返回给调用者。
第一个循环应该打印目录中的所有文件。
答案 1 :(得分:0)
那是因为你只返回第一个文件...
for(int j = 0; j < fileNameList.size(); j++){
return fileNameList.get(j);
}
就像你会做的那样(没有条件)
return fileNameList.get(0);
请改为:
public LinkedList<String> viewDir(String user){
LinkedList<String> fileNameList = new LinkedList<>();
File actual = new File("c:\\Server\\" + user + ".");
for(File f : actual.listFiles()){
System.out.println(f.getName());
fileNameList.add(f.getName());
}//end of advanced for loop
for(int j = 0; j < fileNameList.size(); j++){
return fileNameList.get(j);
}//end of for loop
return null;
}
然后:
for (String fileName : viewDir(user)) {
System.out.println(fileName + "\n\n");
}
答案 2 :(得分:0)
在方法中,您只能执行一个return语句。由于您在循环中返回某些内容,因此您实际执行的操作是在返回第一个值后停止执行该方法。如果要返回所有文件名,则可以尝试构造所有名称的String并返回整个字符串。
StringBuilder sb = new StringBuilder();
for(int j = 0; j < fileNameList.size(); j++){
sb.append(fileNameList.get(j) + "\n");
}//end of for loop
return sb.toString();
答案 3 :(得分:0)
你应该在第二个循环之外得到return
语句。
The return statement会立即停止函数正在执行的操作,并返回在关键字return
之后指定的特定值,因此在您的情况下,它会在第一个循环中返回一个值,并且函数永远不会得到执行第二次和之后循环的机会。
所以你应该做的是在第二个循环之外记录变量j
和return fileNameList.get(j)
。