[英]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
不會報告該例外,因為它會吞噬它們。 我個人建議僅使用Writer
或BufferedWriter
而不是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.