【发布时间】:2012-01-13 16:57:59
【问题描述】:
我是一名正在学习计算机科学入门的初学者,我正在使用 java。尝试在 getLetterGrade 方法中读取多个 txt 文件时,我在此程序中收到以下错误:
线程“主”java.lang.IllegalStateException 中的异常:扫描仪已关闭
import java.util.Scanner;
import java.io.*;
public class Exam
{
private int grade;
private float examAvg;
private String name;
private File exam1Data;
private File exam2Data;
private File namesData;
private Scanner inFileExam1;
private Scanner inFileExam2;
private Scanner inFileName;
//constructor
public Exam() throws IOException
{
exam1Data = new File("exam1.txt");
exam2Data = new File("exam2.txt");
namesData = new File("names.txt");
inFileExam1 = new Scanner(exam1Data);
inFileExam2 = new Scanner(exam2Data);
inFileName = new Scanner(namesData);
}
public float getExam1Avg()
{
examAvg = 0;
while (inFileExam1.hasNext()) {
grade = inFileExam1.nextInt();
examAvg += grade;
}
inFileExam1.close();
examAvg = (float)(examAvg / 25.0);
return examAvg;
}
public float getExam2Avg()
{
examAvg = 0;
while (inFileExam2.hasNext()) {
grade = inFileExam2.nextInt();
examAvg += grade;
}
inFileExam2.close();
examAvg = (float)(examAvg / 25.0);
return examAvg;
}
//method that finds the letter grade given a student name and
//the exam number
public char getLetterGrade(String inputName, int examNum)
{
char letter;
int count = 1;
//inputName = inputName.toLowerCase();
do {
if (inFileName.hasNext()){
name = inFileName.nextLine();
}
count++;
} while (inFileName.hasNext() && !name.equalsIgnoreCase(inputName));
inFileName.close();
if (!name.equalsIgnoreCase(inputName)) {
return 'x';
}
if (examNum == 1) {
for (int i = 1; i <= count && inFileExam1.hasNextInt(); i++) {
grade = inFileExam1.nextInt();
}
inFileExam1.close();
}
else if (examNum == 2) {
for (int i = 1; i <= count && inFileExam2.hasNextInt(); i++) {
grade = inFileExam2.nextInt();
}
inFileExam2.close();
}
else {
return 'x';
}
if (grade >= 90) {
letter = 'A';
}
else if (grade < 90 && grade >= 80) {
letter = 'B';
}
else if (grade < 80 && grade >= 70) {
letter = 'C';
}
else if (grade < 70 && grade >= 60) {
letter = 'D';
}
else {
letter = 'F';
}
return letter;
}
}
错误发生在以下行:
for (int i = 1; i <= count && inFileExam1.hasNextInt(); i++) {
请帮忙!!
这里是主类:
import java.util.Scanner;
import java.io.*;
public class ExamAverages
{
public static void main(String[] args) throws IOException
{
Exam exam = new Exam();
System.out.println(exam.getExam1Avg());
System.out.println(exam.getExam2Avg());
System.out.println(exam.getLetterGrade("name", 1));
}
【问题讨论】:
-
inFileExam*这两个文件中的数据是什么? -
exam1.txt 数据:67 56 90 77 45 87 23 12 87 89 96 44 55 66 22 88 99 77 59 100 2 47 60 8 81exam2.txt 数据:76 34 11 77 44 33 77 88 97 65 79 71 72 45 54 68 32 83 49 88 79 81 93 58 75 顺便说一句,所有数字都写在不同的行上。不知道这是否重要。
-
老兄,你只是让你的帖子更加复杂和难以阅读。坚持主要问题
-
您能否解释一下您的代码应该如何处理所有这些文件