-1

I am getting an error that says Index 4 out of bounds for length 4 and i'm not sure what that means. I someone could please tell me what and where the error is it would be greatly appreciated.

The error: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 4 out of bounds for length 4

My code:

package HW8;

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

public class GradeBookDemo {

    public static void main(String[] args) throws IOException {
        GradeBook gradebook = new GradeBook();

        File file = new File("StudentInfo.txt");
        Scanner inputfile = new Scanner(file);

        // read the student information
        while (inputfile.hasNextLine()) {
            for (int index = 0; index < 5; index++) {

                String name = inputfile.nextLine();
                gradebook.setName(index, name);

                double[] scores = new double[4];

                for (int i = 0; i < 4; i++) {
                    scores[index] = inputfile.nextDouble();
                }

                gradebook.setScore(index, scores);
                inputfile.nextLine();
            }
            for (int index = 0; index < 5; index++) {
                System.out.println("Student name: " + gradebook.getName(index));
                System.out.println("Student average: " + gradebook.getAverage(index));

                System.out.println("Student grade: " + gradebook.getLetterGrade(index));
                System.out.println("");
            }
        }
    }
}

My other code:

package HW8;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Scanner;

public class GradeBook {

    private int NUM_STUDENT = 5;
    private int NUM_TESTS = 4;
    private String[] names = new String[5]; // Array to hold student names
    private char[] grades = new char[5]; // Array to hold student grades

    // Create arrays of scores, one for each student
    private double[] scores1 = new double[NUM_TESTS];
    private double[] scores2 = new double[NUM_TESTS];
    private double[] scores3 = new double[NUM_TESTS];
    private double[] scores4 = new double[NUM_TESTS];
    private double[] scores5 = new double[NUM_TESTS];

    // Create setName and setScore methods
    public void setName(int studentNumber, String name) {
        names[NUM_STUDENT - 1] = name;
    }

    public void setScore(int studentNumber, double[] scores) {

        if (studentNumber == 1) {
            copyArray(scores1, scores);
        } else if (studentNumber == 2) {
            copyArray(scores2, scores);
        } else if (studentNumber == 3) {
            copyArray(scores3, scores);
        } else if (studentNumber == 4) {
            copyArray(scores4, scores);
        }
        if (studentNumber == 5) {
            copyArray(scores5, scores);
        }
    }

    public String getName(int studentNum) // create getName method
    {
        return names[studentNum - 1];
    }

    public double getAverage(int studentNum) { // create getAverage method

        if (studentNum == 1) {
            return calcAverage(scores1);
        } else if (studentNum == 2) {
            return calcAverage(scores2);
        } else if (studentNum == 3) {
            return calcAverage(scores3);
        } else if (studentNum == 4) {
            return calcAverage(scores4);
        }
        if (studentNum == 5) {
            return calcAverage(scores5);
        }
        return studentNum;
    }

    public char getLetterGrade(int studentNum) {
        assignGrade(studentNum);
        return grades[studentNum - 1];
    }

    private void copyArray(double[] to, double[] from) {
        for (int i = 0; i < NUM_TESTS; i++) {
            to[i] = from[i];
        }
    }

    private double calcAverage(double[] scores) {
        double total = 0;
        for (int i = 0; i < scores.length; i++) {
            total += scores[i];
        }
        double average = total / NUM_TESTS;
        return average;
    }

    private void assignGrade(int studentNum) {
        double average = getAverage(studentNum);
        grades[studentNum - 1] = determineGrade(average);
    }

    private char determineGrade(double average) {
        if (average >= 90.0) {
            return 'A';
        } else if (average >= 80.0) {
            return 'B';
        } else if (average >= 70.0) {
            return 'C';
        } else {
            return 'D';
        }
    }
}

azro
  • 53,056
  • 7
  • 34
  • 70

1 Answers1

-2

The exception means that you have only 4 elements in the list/array and you are trying to reach the 5th. Counting starts at 0.

Petre Popescu
  • 1,950
  • 3
  • 24
  • 38