Проблема чтения файла со сканером и циклом - PullRequest
1 голос
/ 07 ноября 2019

У меня есть два разных вида ввода в файл. В первой строке указано количество задач, которые необходимо создать, затем в следующих следующих строках содержатся данные, которые должны быть у каждой задачи, например, допустим, что файл имеет

4
Task1 4, 5
Task2 2, 7
Task3 8, 9
Task4 7, 2
//followed by other data

Я хочу создать массив длязадач, а затем прочитайте информацию, которую должна содержать каждая задача. Итак, я попытался:

Scanner inFile = new Scanner(new File("Readthis.txt"));
int numberOfTasks =inFile.nextInt();

Tasks myTasks = Tasks[numberOfTasks];

for (int i=0;i<numberOfTasks;i++)
{
  String line = inFile.nextLine();
  String[] temp = line.split(" ");
  String TaskName = temp[0];
  int TaskDuration = Integer.valueof(temp[1]);
  //and the other process for the third number 
}

Моя проблема в том, что он устанавливает количество задач равным 4, нет проблем, но при запуске цикла «для» он читает строку как «» и не читает »Task1 4 5 "и т. Д.,

, поэтому прямо сейчас он выдает и исключение, потому что temp [0] пуст, но это должно быть имя задачи.

Сканер не должен продолжать читать, гдеэто прекратилось? после прочтения первой "4"? Я в замешательстве.

Как мне заставить его работать так, как мне нужно?

1 Ответ

2 голосов
/ 07 ноября 2019

Вы не должны использовать nextInt (), но nextLine () для чтения файла строка за строкой.

Попробуйте заменить строку nextInt () следующим:

int numberOfTasks =Integer.parseInt(inFile.nextLine());

Код будет читать всю строку (содержащую число 4 в вашем примере) и будет пытаться разобрать его в целое число.

NextInt () будет читать следующий токен, а не всю строку, поэтому послеnextInt () читает число 4, байты новой строки (\ n) оставляются для чтения nextLine ().

Проверка API сканера Java 8 .

public int nextInt ()

Сканирует следующий токен ввода как int.

...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...