不打印链表的全部内容

时间:2013-12-21 22:34:18

标签: java methods return

我对以下方法有点麻烦。

我想打印出目录中的文件,并从单独的主类中调用此方法。

虽然这确实有效,但它只打印出第一个文件然后停止。

 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");

4 个答案:

答案 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之后指定的特定值,因此在您的情况下,它会在第一个循环中返回一个值,并且函数永远不会得到执行第二次和之后循环的机会。

所以你应该做的是在第二个循环之外记录变量jreturn fileNameList.get(j)