2015-02-16 1 views
-1
public class testBuf { 
    static String path = "C:/cheaters.log"; 

public static void main(String[] args) throws IOException { 
    FileReader fr = new FileReader(path); 
    BufferedReader br = new BufferedReader(fr); 
    String line = br.readLine(); 
    int totword = 0; 
    while (line != null) { 
     String a[] = line.split(" "); 
     for (int i = 0; i < a.length; i++) { 
      if (a[i].length() > 0) 
       totword += 1; 
     } 
     **line = br.readLine();** 
    } 
    System.out.print("Total number of words" + totword); 
    br.close(); 

} 

} 

Я не понимаю, почему мы должны написать еще один код «line = br.readLine» в цикле здесь? Я думаю, что это не обязательно, но программа не будет работать, когда я попытаюсь удалить ее. Пожалуйста, объясните это мне;)Как работает readLine?

+1

Вы можете написать это более красиво с помощью инструкции do-while. –

+1

Это 2015 год; используйте ['Files.newBufferedReader()'] (http://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#newBufferedReader-java.nio.file.Path-java .nio.charset.Charset-). – fge

ответ

0

Каждый вызов метода читает особую линию.

Первый вызов читается в первой строке файла, а затем после него цикл while проверяет, равна ли эта строка. Затем внутри цикла while снова вызывается метод, и вторая строка файла считывается.

Затем он возвращается к началу цикла while и проверяет, равна ли строка. Если он не равен нулю, цикл запускается снова, если он равен нулю, а это означает, что вы достигли конца файла, цикл не запускается.

Обычной аббревиатура этой идиомы, чтобы прочитать в строках и назначить их на переменный внутри время цикла, аналогичен следующий код:

String line = ""; 
int totword = 0; 

while ((line = br.readLine()) != null) { 
    String a[] = line.split(" "); 
    for (int i = 0; i < a.length; i++) { 
     if (a[i].length() > 0) 
      totword += 1; 
    } 
} 

Этого метод чтения решает проблему из двух вызовов readLine, поскольку readLine теперь вызывается каждый цикл цикла while и автоматически проверяется, если он равен нулю.

0

Если первый вызов readLine() возвращает ненулевое значения а, то условие внутри while() всегда будет true. Таким образом, программа войдет в цикл бесконечный цикл.

br.readLine() будет продолжать читать строки. Таким образом, вы должны получить нулевое значение, когда чтение закончится, и, следовательно, вы выйдете из цикла.

0

Поскольку readLine() читает следующую строку, которая будет проверена здесь: while (line != null) {

, если вы дойдете до конца файла readLine() вернет null. поэтому, если вы не называете `readline? внутри цикла вы будете работать с первой строкой.

1

Если вы удалите br.readLine(), ваш цикл while будет бесконечным. В конце концов, вы повторяетесь снова и снова. С помощью метода readLine() вы переходите к следующей строке до тех пор, пока не осталось больше строк, оно возвращает null

 Смежные вопросы

  • Нет связанных вопросов^_^