2016-02-29 4 views
0
public static int getBoys(ArrayList<String> boysNames, Scanner s) throws IOException { 
    // Getting boys file location 
    System.out.println("Please enter the file name containing the the boys names."); 
    String boyFileLocation = s.nextLine(); 

    // Opening the file containing the names of boys 
    File boyFile = new File(boyFileLocation); 
    Scanner BF = new Scanner(boyFile); 
    int initialBoyCount = 0; 
    int i = 0; 
    boysNames.add(BF.nextLine()); 

    while (BF.hasNextLine()) { 
     if (BF.nextLine().equals(boysNames.get(i))) { 

     } else { 
      boysNames.add(BF.nextLine()); 
      initialBoyCount++; 
      i++; 
      System.out.println(boysNames.get(i)); 
     } 
    } 

    return (initialBoyCount); 
} 

Я пытаюсь прочитать из файла список имен и добавить их в список массивов. Однако есть дубликаты определенных имен, и я только поддерживаю, чтобы сохранить уникальные (если, если они уже существуют, не добавляйте их снова). Однако я понял, что это только дает мне все другие названия. Начиная с 2 и давая мне следующие ошибки.Почему мой метод не читается в каждом значении из файла?

Exception in thread "main" java.util.NoSuchElementException: No line found 
    at java.util.Scanner.nextLine(Scanner.java:1540) 
    at namesList.namesList.getBoys(namesList.java:53) 
    at namesList.namesList.main(namesList.java:27) 

ответ

1

Причина исключения в этой строке

if (BF.nextLine().equals(boysNames.get(i))) 

вы читаете строку и, если уравнение не true в другом отделении вы звоните BF.nextLine() снова. Поэтому иногда вы дважды читаете строку, но вы вызываете hasNextLine() только один раз.

Решение: чтение строки только за один раз до if заявление.

+0

Я понимаю, о чем вы говорите. Так есть ли способ ссылаться на то, что находится в файле дважды, не перемещая маркер? –

+1

@ M.Pestonit решение: вы должны вызывать 'hasNextLine()' и 'BF.nextLine()' только один раз. Я только что изменил свой ответ с решением, каким оно должно быть. –

+1

@Andriy попробуйте поставить 'String currentLine = BF.nextLine()' в качестве первой строки в вашем цикле while. Затем укажите 'currentLine' вместо' BF.nextLine() '. – GreenGiant

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