0

基本的に、ドライバー クラスでテキスト ファイルを読み取っていますが、別のクラスのテキスト ファイルから読み取る命令を使用して、別のクラスのメソッドを呼び出していますが、機能していません。これは、これまでのドライバー クラスの内容です。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class CourseGrade {
    static int numberOfStudents;
    private int numberOfAssignAndLabs;
    private int numberOfTestsAndQuiz;
    private static int patZyanteAttend = 3;
    static int patZyanteAttendScore = 0;

    public void setNumberOfAssignAndLabs() {
        numberOfAssignAndLabs = 21;
    }

    public int getNumberOfAssignAndLabs() {
        return numberOfAssignAndLabs;
    }

    public void setNumberOfTestsAndQuiz() {
        numberOfTestsAndQuiz = 4;
    }

    public int getNumberOfTestsAndQuiz() {
        return numberOfTestsAndQuiz;
    }

    public static void main(String[] args) {
        Student myStudent = new Student();

        Scanner scanner = new Scanner(System.in);
        try {
            scanner = new Scanner(new File("grades.txt"));
        } catch (FileNotFoundException e) {
            System.out
                    .println("Error opening file. Please make sure that you have a grades.txt file in the same folder as GradeCalculator.class");
            System.exit(0);
        }

        System.out.println("Name" + "\t" + "\t" + "Assignment Score" + "\t"
                + "Test Score");
        numberOfStudents = scanner.nextInt();

        for (int i = 0; i < numberOfStudents; i++) {

            myStudent.setFirstName();
            System.out.print(myStudent.getFirstName() + " ");

            myStudent.setLastName();
            System.out.print(myStudent.getLastName());

            myStudent.setHomeworkScore();
            System.out.print(myStudent.getHomeworkScore() + " ");

            myStudent.setTestScore();
            System.out.print(myStudent.getTestScore());

            myStudent.computeGrade();
            System.out.println(myStudent.getGrade());

            for (int l = 0; l < patZyanteAttend; l++) {
                int temp;
                temp = scanner.nextInt();
                patZyanteAttendScore += temp;
            }
        }

    }
}

そして、これは私が呼んでいるクラスです:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Student {
    private String firstName;
    private String lastName;
    private String letterGrade;
    private int homeworkScore;
    private int testScore;

    CourseGrade myCourseGrade = new CourseGrade();

    Scanner scanner = new Scanner(System.in);

    public Student() {
        homeworkScore = 0;
        testScore = 0;

    }

    public void setFirstName() {
        firstName = scanner.next();

    }

    public String getFirstName() {
        return firstName;
    }

    public void setLastName() {

        lastName = scanner.next();
    }

    public String getLastName() {
        return lastName;
    }

    public void setHomeworkScore() {
        int temp;
        for (int j = 0; j < myCourseGrade.getNumberOfAssignAndLabs(); j++) {
            temp = scanner.nextInt();
            homeworkScore += temp;
        }
    }

    public int getHomeworkScore() {
        return homeworkScore;
    }

    public void setTestScore() {
        int temp;
        for (int k = 0; k < myCourseGrade.getNumberOfTestsAndQuiz(); k++) {
            temp = scanner.nextInt();
            testScore += temp;
        }
    }

    public int getTestScore() {
        return testScore;
    }

    public void computeGrade() {

        if (homeworkScore <= 599 || testScore <= 149 || homeworkScore <= 719
                && testScore <= 179 || homeworkScore <= 779 && testScore <= 164
                || homeworkScore <= 659 && testScore <= 209) {
            letterGrade = "P";
        }

        if (homeworkScore >= 1140 && testScore >= 180 || homeworkScore >= 1080
                && testScore >= 195 || homeworkScore >= 960 && testScore >= 210
                || homeworkScore >= 900 && testScore >= 225
                || homeworkScore >= 840 && testScore >= 240
                || homeworkScore >= 780 && testScore >= 255
                || homeworkScore >= 720 && testScore >= 285) {
            letterGrade = "G";
        } else {
            letterGrade = "A";
        }

    }

    public String getGrade() {
        return letterGrade;
    }

}

なんらかの理由で、for ループに入るとプログラムが終了します。

4

1 に答える 1

1

セッターはパラメーターを受け取る必要があるため、設定する値を認識できます

たとえば、学生の場合:

public void setFirstName(String fName) {
    firstName = fName;
}

メソッド パラメータの値から、クラスのフィールドfirstnameを設定します。StudentfName

からメソッドを呼び出すときはmain、読み込んでいるファイルの名前を含めます。

myStudent.setFirstName(scanner.next());

Student クラスにスキャナーは必要ありません。

パラメータを受け取るようにすべてのセッターを変更し、Scannerinmainを使用して値を指定します。

于 2013-10-30T15:12:04.980 に答える