2016-02-25 2 views
0

Я пытаюсь распечатать список участников, и программа печатает все имена, но я получаю сообщение об ошибке. Мне нужна помощь в поиске способа печати имен, которым программа завершит цикл while после имени.Пытается распечатать список из текстового файла?

Вот список:

Leonardo Dicaprio 
 
Susan Sarandon 
 
Tom Hanks 
 
Robert De Niro 
 
Barack Obama 
 
Helen Keller 
 
Katharine Cornell 
 
Helen Hayes 
 
John Laughlin 
 
Mark Zuckerberg 
 
Joe Lipari 
 
Welker White

Это моя программа:

public void printActors() 
 
\t 
 
\t \t \t throws FileNotFoundException 
 
\t { 
 
\t \t Scanner input = new Scanner(new File("actors")); 
 
\t \t String line = null; 
 
\t \t while ((line = input.nextLine()) != null) 
 
\t \t { 
 
\t \t  System.out.println(line); 
 
\t \t } 
 
\t \t 
 
\t 
 
\t }

Это выход:

Leonardo Dicaprio 
 
Susan Sarandon 
 
Tom Hanks 
 
Robert De Niro 
 
Barack Obama 
 
Helen Keller 
 
Katharine Cornell 
 
Helen Hayes 
 
John Laughlin 
 
Mark Zuckerberg 
 
Joe Lipari 
 
Welker White 
 
Exception in thread "main" java.util.NoSuchElementException: No line found 
 
\t at java.util.Scanner.nextLine(Unknown Source) 
 
\t at Game.BaconGame.main(BaconGame.java:26)

Может кто-то помочь мне так Он может печатать имена в списке и избавиться от ошибки?

ответ

2

Используйте while (input.hasNextLine()) проверить, существует ли строка входного потока (Scanner не возвращает null, если строка не найдена, она бросает NoSuchElementException)

Я настоятельно рекомендую использовать FileReader и BufferedReader, если вы просто хотите прочитайте файл, а не parse it.

0
FileReader in = new FileReader("actors"); 
    BufferedReader br = new BufferedReader(in); 
    String line=br.readLine() ; 
    while (line != null) { 
     System.out.println(line); 
     line=br.readLine() ; 
    } 
    in.close(); 

или в соответствии с вашим кодом

Scanner input = new Scanner(new File("actors")); 
while ((input.hasNextLine())) 
      { 
       System.out.println(input.nextLine()); 
      } 
+0

Вы вызываете 'br.readLine()' в два раза, он будет пропускать линию который вы проверяете * не null *. –

+0

Спасибо, человек! оно работает! – Jay

+0

, если это решит вашу проблему, отметьте его правильным ответом – Musaddique

0

Попробуйте следующий код:

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 

public class Test { 
    public static void main(String[] args) { 
     BufferedReader bufferedReader = null; 
     try { 
      String line; 
      bufferedReader = new BufferedReader(new FileReader("actors")); 
      while ((line = bufferedReader.readLine()) != null) { 
       System.out.println(line); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       if (bufferedReader != null) 
        bufferedReader.close(); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 
    } 
} 
0
public void printActors() throws FileNotFoundException 
    { 
     Scanner input = new Scanner(new File("c:\\actors.txt")); 

     while(input.hasNextLine()) 
     { 

     System.out.println(input.nextLine()); 
     } 
    } 
+1

Сброс кода не помогает. Пожалуйста, попробуйте включить комментарии и объяснения. – user2004685

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