Question

Esentially, I'm reading a text file in my driver class, but I'm calling a methods from another class with instructions to read from the text file from another class, but it just isn't working. This is what I have so far in my driver class:

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;
            }
        }

    }
}

and this is the class I'm calling:

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 whatever reason, the program terminates when I get inside the for loop

Was it helpful?

Solution

Your setters should take a parameter, so it knows what value to set

for example, in Student:

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

sets the field firstname in the Student class, from the value of the fName method parameter.

When you call the method from main, include the forename from the file you are reading:

myStudent.setFirstName(scanner.next());

You don't need a scanner in your Student class.

Change all your setters to take a parameter, and use the Scanner in main to supply the values.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top