0

ループが無限にループし続ける理由がわかりません..

URLリンク

public String findFile() {
    try (BufferedReader br = new BufferedReader(
            new FileReader("urls.txt"))) {

        String sCurrentLine;

        if ((sCurrentLine = br.readLine()) != null) {
            System.out.println(sCurrentLine);

            break;
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
    return findFile();

}

sCurrentLine を 1 回印刷したいだけですが、無限に印刷し続けます。問題はfindFile() のリターンにあると思いますが、修正方法がわかりません。

乾杯

更新 更新 再度更新

findFile()メソッドをにすることで問題を修正しvoid、while ループから if ステートメントに変更しました。

URLLinks 更新コード

public void findFile() {
    try (BufferedReader br = new BufferedReader(
            new FileReader("urls.txt"))) {

        String sCurrentLine;

        while ((sCurrentLine = br.readLine()) != null) {
            System.out.println(sCurrentLine);

        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}
4

2 に答える 2

7

findFile()これは、常に自分自身を呼び出す無限再帰です。以外の何かreturn findFile();が必要ですが、関数の目的が不明です。おそらく次のとおりです。

return sCurrentLine; // with 'sCurrentLine' declared prior try

最初の行を読み取った後に終了するため、ループは不要のようです。

于 2013-05-27T15:14:32.633 に答える
1

while ループは停止します。問題は、メソッド自体からメソッドを呼び出して無限再帰を作成していることです。これを解決するには、たとえば次のいずれかを実行できます。

1) メソッドの戻り値の型を void に変更し、return ステートメントを削除します。その後、メソッドは何も返さず、最初の行を出力した後に終了します (break ステートメントのため)。

また:

2) 代わりに文字列を返します。sCurrentLine は、現在のコードではファイルの最初の行の値のみを取得します (while ループの break ステートメントのため)。

もちろん、上記の結果は、ファイルを開くことができる場合 (そうでない場合、コードは例外をスローします)、およびファイルが空でない場合 (そうでない場合は、while ループに入ることはありません) にのみ発生します。

于 2013-05-27T15:25:41.823 に答える