Использование цикла while для чтения файлов в цикле while
Сейчас я беру у себя класс Data Structures, и мы собираемся использовать очередь в нашей следующей программе.
Нам дают входной файл, такой как этот:
10 324 Boots 32.33
11 365 Gloves 33.33
12 384 Sweater 36.33
13 414 Blouse 35.33
Я должен прочитать первый int (который является единицей времени) и использовать его как ссылку на мои часы, которые продолжают работать в фоновом режиме.
Я сделал что-то вроде этого:
Scanner infp = new Scanner(new File(FILE));
while (busy) {
clock = 0;
clock += clockCount++;
while (infp.hasNext()) {
timeEntered = infp.nextInt();
infp.nextLine();
System.out.println(timeEntered);
busy = true;
if (timeEntered == clock) {
itemNum = infp.nextInt();
type = infp.nextLine();
itemPrice = infp.nextDouble();
}
}
}
Проблема в том, что когда я запускаю его, я получаю ошибку "InputMismatchException". Я осознаю тот факт, что вам нужно пропустить карету перед строкой, что я и делаю.
Я понятия не имею, куда идти отсюда.
1 ответ
Итак, учитывая эти столбцы:
10 324 Boots 32.33
11 365 Gloves 33.33
12 384 Sweater 36.33
13 414 Blouse 35.33
Для каждой строки вы читаете первый столбец в timeEntered
, И тогда вы делаете infp.nextLine()
и это ошибка. Когда вы звоните nextLine
Сканер читает все непрочитанные в текущей строке до конца. Это означает, что вы не можете прочитать значения других столбцов. Но они вам нужны. Так что не звони nextLine
когда вы все еще хотите обработать значения в строке. Позвони после.
И у вас снова возникает та же проблема, когда вы читаете type
а также itemPrice
,
Заменить while (infp.hasNext())
с этим:
while (infp.hasNextLine()) {
int timeEntered = infp.nextInt();
System.out.println(timeEntered);
busy = true;
if (timeEntered == clock) {
itemNum = infp.nextInt();
type = infp.next();
itemPrice = infp.nextDouble();
}
infp.nextLine();
}