Прежде всего, вы сбрасываете grade
каждый раз, когда читаете строку, и ничего с ней не делаете, так что часть кода бесполезна.
Но чтобы ответить на ваш вопрос:
Согласно API, Scanner
возвращает IllegalStateException
только после того, как объект закрыт с помощью Scanner.close()
или каким-либо образом закрыт системой.
Попробуйте переместить объявление Scanner
для inFileExam1
рядом с тем местом, где вы его используете, например:
if (examNum == 1) {
inFileExam1 = new Scanner(exam1Data); // Add this
for (int i = 1; i <= count && inFileExam1.hasNextInt(); i++) {
grade = inFileExam1.nextInt();
}
inFileExam1.close();
}
else if (examNum == 2) {
inFileExam2 = new Scanner(exam2Data); // And this
for (int i = 1; i <= count && inFileExam2.hasNextInt(); i++) {
grade = inFileExam2.nextInt();
}
inFileExam2.close();
}
}