[英]Print lines of a file in reverse order using recursion - Do I understand correctly?
目標:使用遞歸以相反的順序打印文件的行。
這是我的兩個實現printReverse0
和printReverse1
。 正如您所看到的代碼,唯一的區別是將input.nextLine()
存儲在局部變量String line中,這使每個遞歸調用的每一行都存儲在每個堆棧中,並在printReverse1中冒泡時進行打印。
但是,我希望printReverse0也會工作,即使我沒有將每個行顯式存儲在局部變量“ line”中,因為每次遞歸調用時,方法參數中的輸入都存儲在每個激活記錄中。 因此,當氣泡上升時,它可以使用存儲在每個激活記錄中的“掃描儀”輸入來打印每一行。
但是我意識到,由於printReverse0並沒有通過使用input.nextLine();
移至下一行,因此不會前進到下一行input.nextLine();
在調用遞歸方法之前。 這意味着當遞歸方法的參數是array及其索引void method( int[] arr, int index )
時, input.nextLine()
的行為就像i + 1一樣,將轉到數組中的下一個元素。
這意味着String line = input.nextLine()
設置為下一行的開頭,並將當前行存儲在堆棧中。 因此,如果沒有它,它就不會轉到下一行,而一直指向第一行,這會導致堆棧溢出==>我是否正確理解?
import java.util.*;
import java.io.*;
public class PrintReverseFile_Rec
{
static void printReverse0( Scanner input ) {
if( input.hasNextLine() ) {
printReverse0( input ); // stack overflow here!!!
System.out.println( input.nextLine() );
}
return;
}
static void printReverse1( Scanner input ) {
if( input.hasNextLine() ) {
String line = input.nextLine();
printReverse1( input );
System.out.println( line );
}
return;
}
public static void main( String[] args ) {
File file = new File( "test.txt" );
Scanner input = null;
try {
input = new Scanner( file );
} catch( Exception e ) {}
printReverse0( input );
//printReverse1( input );
}
}
是。 據我所知,您的理解是正確的。 printReverse0
方法將永遠不會退出遞歸,因為hasNext
調用始終為true,這將導致堆棧溢出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.