簡體   English   中英

使用遞歸以相反的順序打印文件的行-我理解正確嗎?

[英]Print lines of a file in reverse order using recursion - Do I understand correctly?

目標:使用遞歸以相反的順序打印文件的行。

這是我的兩個實現printReverse0printReverse1 正如您所看到的代碼,唯一的區別是將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.

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