没有递归方法的输出

时间:2012-04-27 12:59:11

标签: java recursion bufferedreader

我有以下方法来读取文件并以相反的顺序输出它的行:

public void Reverse(BufferedReader br, PrintWriter pw)
{
  try
  {
    String headLine = br.readLine();

    if (headLine != null)
    {
      Reverse(br, pw);
      pw.println(br.readLine());

    }//if
    pw.println(headLine);      
  }//try
}//Reverse

出于某种原因,我在代码运行时没有在输出文件中看到任何内容它正在编译正确。有什么想法吗?

3 个答案:

答案 0 :(得分:4)

首先,你的代码甚至不会编译 - 你有一个没有catch或finally块的try块。当我们看不到您的真实代码时,确切地知道发生了什么事情比平常更难。

其次,你没有明显的原因两次调用readLine(),然后写出headLine,即使它是空的。你的代码真的不应该是:

if (headLine != null)
{
  Reverse(br, pw);
  pw.println(headLine);
}

之后没有额外的println

我的猜测是你永远不会刷新或关闭PrintWriter,而且你已经关闭了自动刷新功能。不要那样做。或者某个地方可能存在异常,PrintWriter不会报告,因为它会吞下它们。我个人建议只使用WriterBufferedWriter而不是PrintWriter,并声明Reverse可以投掷IOException。然后确保调用代码在finally块中关闭writer。

我还建议使用递归,除非你只是使用它作为调查递归的方法。将整个文件读入字符串列表,将其反转,然后将其全部写出来会更加精明。

答案 1 :(得分:0)

试试这段代码:

public void Reverse(String headLine, BufferedReader br, PrintWriter pw) throws IOException
{
    try
    {
        headLine = br.readLine();

        if (headLine != null)
        {
            Reverse(headLine, br, pw);
            pw.println(headLine);

        }//if
        //pw.println(headLine);
    }finally {
    }
}

这里,最初将标题发送为“”

答案 2 :(得分:0)

您的原始代码尝试在已经读取所有行之后写入新读取的行。

您需要的是在再次致电headline之后写下Reverse值,如下所示:

public void Reverse(BufferedReader br, PrintWriter pw) throws IOException
{
        String headLine = br.readLine();

        if (headLine != null)
        {
            Reverse(br, pw);
            pw.println(headLine);

        }
}