0

生徒の成績が入ったテキストファイルから入力を受け取るプログラムを書いています。これらのグレードは平均化され、配列リストに追加されます。ただし、ファイルを読み込むのに問題があります。入力の不一致を受け取っています。calcAssignmentAverageメソッドのループを15未満に変更しようとしましたが(15のラボグレードがあり、テキストファイルの2行目です)、それでも入力の不一致が発生します。

ファイル(実際のファイルには、次の形式の16人の学生がいます。):

Puckett, Karen
10 10 9.5 10 10 8 9.5 10 10 10 9 10 10 10 0
4 3 5 3 5 2 3 2 1.5 1 5 3.5
17.5 24 22 23.5 22 23
90 91
96

コード:

 public static void main(String[] args) throws IOException {
    final double NUM_OF_LABS = 15;
    final double NUM_OF_QUIZZES = 12;
    final double NUM_OF_PROJECTS = 6;
    final double NUM_OF_EXAMS = 2;
    final double NUM_OF_FINAL = 1;
    final double LAB_POINTS = 150;
    final double QUIZ_POINTS = 60;
    final double PROJECT_POINTS = 150;
    final double EXAM_POINTS = 200;
    final double FINAL_POINTS = 100;

    //Open input file
    File myFile = new File("scores.txt");
    if (!myFile.exists()) {
        System.out.println("The input file was not found.");
        System.exit(0);
    }

    Scanner inputFile = new Scanner(myFile);

    ArrayList<Student> studentList = new ArrayList<Student>();

    readFile(inputFile, studentList, NUM_OF_LABS, LAB_POINTS, NUM_OF_QUIZZES,
            QUIZ_POINTS, NUM_OF_PROJECTS, PROJECT_POINTS, NUM_OF_EXAMS,
            EXAM_POINTS, NUM_OF_FINAL, FINAL_POINTS);

}

public static void readFile(Scanner inputFile,
        ArrayList<Student> studentList, double NUM_OF_LABS,
        double LAB_POINTS, double NUM_OF_QUIZZES, double QUIZ_POINTS,
        double NUM_OF_PROJECTS, double PROJECT_POINTS,
        double NUM_OF_EXAMS, double EXAM_POINTS, double NUM_OF_FINAL,
        double FINAL_POINTS) {

    //read and set data for student1:
    while (inputFile.hasNext()) {
        //create a new student
        Student currentStudent = new Student();

        //read name
        String name;
        name = inputFile.nextLine();
        currentStudent.setName(name);

        //read lab average 
        double labAverage = 0;
        labAverage = calcAssignmentAverage(NUM_OF_LABS, inputFile, LAB_POINTS);
        currentStudent.setLabAverage(labAverage);


        //add currentStudent to the list
        studentList.add(currentStudent);


    }
}

public static double calcAssignmentAverage(double NUM_ASSIGNMENTS,
        Scanner inputFile, double MAX_POINTS) {

    double sum = 0;
    double average = 0;

    for (int i = 0; i < NUM_ASSIGNMENTS; i++) {
        sum = sum + inputFile.nextDouble();
    }
    average = (sum / MAX_POINTS) * 100;

    return average;
}
4

1 に答える 1

0

バイロンは正しい。次の学生に進むためのあなたの論理は時期尚早に実行されています。同じ生徒に当てはまると仮定して、ループの次の反復に進む前に、3行目から6行目を読む必要があります。

また、doubleを読み取った後、スキャナーは自動的に次の行に進みません。明示的に行う必要があります。

于 2013-02-24T21:07:59.927 に答える