2014-10-06 3 views
0

Я не знаю, почему это не сработает. Я дважды и тройка проверил, что файл в FileWriter имеет текст (введенный другим PrintWriter ранее в отдельной программе), но оператор while не работает. Прокомментированные строки были различными тестами, которые я выполнял, чтобы попытаться выяснить, что происходит. То, что я пытаюсь решить, - это выполнить итерацию по массиву и добавить идентификатор группы ко всем Лицам. Если кто-то знает, что это такое, мы будем очень благодарны. Я заранее извинюсь за любые ошибки в форматировании, и любые комментарии о том, как легче помочь, также будут весьма признательны.Java Scanner throws NoSuchElementException: не найдена строка

public static void updateWinners(Person[] Players, int n) 
      throws FileNotFoundException { 
      // n is 2 or 4 depending on round 
     File fileS = new File(
       "C:\\Users\\Patrick\\Desktop\\New folder\\FileWriter\\Win"); 
     File fileP = new File(
       "C:\\Users\\Patrick\\Desktop\\New folder\\Bracket\\Win"); 
     Scanner fs = new Scanner(fileS); 
     PrintWriter writer = new PrintWriter(fileP); 
      //int q=0; 
     while (fs.hasNextLine()) { 
       //System.out.println(Players[q].toString()); 
      for (int i = 0; i < Players.length; i++) { 
       if (fs.nextLine().equals(Players[i].toString())) { 
        Players[i].addGroup(alpha[i/n]); 
        System.out.println(Players[i].toString()); 
        writer.println(Players[i].toString()); 
       } 
      } 
       //q++; 
     } 
     writer.close(); 
     fs.close(); 
    } 
+0

'если (fs.nextLine() равно (игроков [я] .ToString())) 'это проблема. –

+0

Попробуйте выполнить печать fileS.exists() перед циклом while. Форматирование вашего пути кажется очень изворотливым со всеми этими обратными косыми чертами. Поскольку вы используете .nextLine() внутри цикла for-loop, есть вероятность, что у вас будет новая строка при запуске цикла while, но затем закончится в цикле. – SamTebbs33

ответ

2

ли это так,

while (fs.hasNextLine()) { 
    String s = fs.nextLine(); 
      //System.out.println(Players[q].toString()); 
     for (int i = 0; i < Players.length; i++) { 
      if (s.equals(Players[i].toString())) { 
       Players[i].addGroup(alpha[i/n]); 
       System.out.println(Players[i].toString()); 
       writer.println(Players[i].toString()); 
      } 
     } 
      //q++; 
    } 

Объяснение:

При вызове fs.nextLine() каждый раз в цикле игроков. Он читает новую строку из файла. Итак, все строки файла читаются, прежде чем вы заполните все игроки.

При попытке чтения сканер выдает исключение, и в файле больше нет данных.

Source

Броски:.

NoSuchElementException - если ни одна строка не была найдена

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