Использование цикла 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();
}
Другие вопросы по тегам