Почему мой буферизованный читатель читает только каждую вторую строку?

у меня есть буферизованный читатель, как это:

BufferedReader br = BufferedReader(new FileReader(("Output/pointsSorted.txt")));

    String line;
    while((line = br.readLine()) != null){
        System.out.println(br.readLine());
    }
    br.close();
}

но он читает только каждую вторую строку, и я не понимаю, почему.

Это файл, из которого читатель читает:

bendsan: 1000
gotr_gotey: 87
lordelain: 87
nightbot: 87
vellsain: 87
r3l10n: 86
skalrayi: 85
brom13: 84
llecrezzef: 84
cloudinger: 74
littleangelswing: 60
n3belmacht: 43
mrscandy_: 32
sluckzz: 31
elboy717: 30
assassinenfan: 18
msurai: 18
woischdesdu: 16
daspaddy: 14
sirfullmetal: 10
daranun: 1

и это вывод:

gotr_gotey: 87
nightbot: 87
r3l10n: 86
brom13: 84
cloudinger: 74
n3belmacht: 43
sluckzz: 31
assassinenfan: 18
woischdesdu: 16
sirfullmetal: 10   

как видите, каждая вторая строка пропускается.


person Skalrayi    schedule 28.11.2016    source источник
comment
Каждый readLine занимает одну строку, включая вызов в условии while, поэтому вы делаете это дважды на каждой итерации, но печатаете результат только второго вызова.   -  person Pshemo    schedule 28.11.2016


Ответы (3)


Поскольку вы печатаете br.readLine() вместо line, поэтому читаете 2 строки на каждую итерацию цикла (но печатаете только одну).

person Kayaman    schedule 28.11.2016
comment
ой мой плохой. этого можно было избежать. Спасибо! - person Skalrayi; 28.11.2016

BufferedReader br = BufferedReader(new FileReader(("Output/pointsSorted.txt")));

    String line;
    while((line = br.readLine()) != null){ // line 1
        System.out.println(br.readLine()); // line 2
    }
    br.close();
}

Строка 1 читает строку из файла и сохраняет ее в line. Затем строка 2 читает новую строку из файла и выводит ее. Таким образом, первая строка считывается в line, затем выводится вторая строка, затем третья строка считывается в line, затем выводится четвертая строка и так далее.

Вы, вероятно, хотели этого:

BufferedReader br = BufferedReader(new FileReader(("Output/pointsSorted.txt")));

    String line;
    while((line = br.readLine()) != null){
        System.out.println(line);
    }
    br.close();
}
person David Schwartz    schedule 28.11.2016

Вы вызываете readline() дважды - один раз внутри условия while (а затем игнорируете результат) и один раз внутри его тела. Просто удалите один из вызовов, и все будет в порядке. Например.:

String line;
while ((line = br.readLine()) != null) {
    System.out.println(line); // Use the value of line populated in the while's condition
}
br.close();
person Mureinik    schedule 28.11.2016