2016-03-06 3 views
0

Этот метод по существу является методом, который читает данный входной файл и рекурсивно заполняет двоичное дерево данной информацией.Почему я получаю исключение NoSuchElementException?

Входной файл имеет особый формат. Одна строка, содержащая либо Q:, либо A: для указания, является ли следующая строка вопросом или ответом. Предполагается, что все файлы, используемые с этим методом, будут следовать этому формату.

Поскольку каждый файл следует за одним и тем же форматом, и никогда не должно быть строк с нечетным номером, данные не должны полностью потребляться до достижения одного из вызовов nextLine(). Тем не менее, программа последовательно выдает NoSuchElementException.

Есть ли что-то, что мне не хватает?

private QuestionNode readHelper(Scanner input){ 
    // Base case: If the given input has no more lines to read. 
    if (input.hasNextLine()) { 
     String category = input.nextLine(); 
     String text = input.nextLine(); 
     QuestionNode root = new QuestionNode(text); 
     if (category.startsWith("Q")) { 
      // Recursive case: If there are still questions available to ask 
      // more input is read, which replaces the currently stored data. 
      root.left = readHelper(input); 
      root.right = readHelper(input); 
     } else { 
      return root; 
     } 
    } 
    return null; 
} 
+0

У вас есть символ конца строки после последней строки? –

+0

Лучший способ узнать, как запустить ваш код под отладчиком шаг за шагом и изучить значения на этом пути. –

+0

Убедитесь, что ваш файл содержит запись с правильным форматом? –

ответ

1

Второй вызов nextLine() в инструкции if. Нет гарантии, что nextLine() после String category = input.nextLine().

+0

Существует гарантия, основанная на файлах, которые я использую. И эти файлы - это файлы, с которыми я тестирую. – user3450277

+1

без просмотра ваших файлов, трассировки стека и т. Д. Сложно определить проблемы. Все, что я могу сделать, это посмотреть на ваш код и документацию по Java - и, согласно документации Scanner, Scanner.nextLine() Throws: NoSuchElementException - если строка не была найдена IllegalStateException - если этот сканер закрыт – neal

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

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