簡體   English   中英

遞歸方法無輸出

[英]No output for recursive method

我有以下方法讀取文件並以相反順序輸出其行:

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

由於某種原因,運行代碼時我在輸出文件中看不到任何內容,盡管它可以正確編譯。 有任何想法嗎?

首先,您的代碼甚至無法編譯-您有一個try塊,沒有catch或finally塊。 當我們看不到您的真實代碼時,要確定正在發生的事情甚至比平時更難。

其次,您無故調用兩次readLine() ,然后將headLine寫出,即使它為null。 您的代碼不應該是:

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

之后沒有多余的println

我的猜測是您永遠不會刷新或關閉PrintWriter ,並且您已經關閉了自動刷新功能。 不要那樣做 也許某個地方有一個例外, PrintWriter不會報告該例外,因為它會吞噬它們。 我個人建議僅使用WriterBufferedWriter而不是PrintWriter ,並聲明Reverse會拋出IOException 然后確保調用代碼在finally塊中關閉編寫器。

我還建議不要為此使用遞歸,除非您只是將其用作調查遞歸的一種方式。 將整個文件讀入一個字符串列表,將其反轉,然后全部寫出,這將是明智得多的選擇。

試試這個代碼:

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 {
    }
}

在這里,最初將標題發送為“”

您的原始代碼嘗試在所有行均已讀取之后編寫新讀取的行。

您需要的是在再次調用Reverse之后編寫headline值,如下所示:

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

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

        }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM