Как заставить мой метод sum, который использует цикл for в списке, работать правильно? - PullRequest
0 голосов
/ 24 октября 2019

Я пишу программу для расчета среднего балла и распечатки стенограммы. У меня возникли некоторые проблемы с методами, которые я создал, чтобы получить сумму семестров в год. Вот соответствующий код:

    double sumGP;
    ArrayList<Double> semesterGPs = new ArrayList<Double>();
    public void getGPs(double aGP) {
        semesterGPs.add(aGP);
    }
    public double getTotalGP() {
        for(int i = 0; i <= this.semesterGPs.size(); i++)                        
            sumGP = sumGP + this.semesterGPs.get(i);                            
        return sumGP;   

Вот те блоки кода, которые используются в основном методе, а также соответствующий основной код метода:

        Scanner letterGrade = new Scanner(System.in);

            System.out.print("Enter the letter grade recieved if the course is completed, otherwise enter null: ");
            aLetterGrade = letterGrade.next();
            if ((aLetterGrade.contentEquals("a")) || (aLetterGrade.contentEquals("A"))) {
                double aGPRecieved = 4.0;
                //gradePoints.add(aGPRecieved);
                aSemesterGrade.getGPs(aGPRecieved);
                aTotals.getGPs(aGPRecieved);
                System.out.println(aGPRecieved);

            }

aSemesterGrade.getTotalGP();

Мой цикл for продолжает выдавать ошибку индекса вне границ:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 1 out of bounds for length 1
    at java.base/jdk.internal.util.Preconditions.outOfBounds(Unknown Source)
    at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Unknown Source)
    at java.base/jdk.internal.util.Preconditions.checkIndex(Unknown Source)
    at java.base/java.util.Objects.checkIndex(Unknown Source)
    at java.base/java.util.ArrayList.get(Unknown Source)
    at realGPA/realGPA.SemesterGrades.getTotalGP(SemesterGrades.java:50)
    at realGPA/realGPA.MainController.main(MainController.java:186)

Я уже распечатал информацию из ArrayList "semesterGPs", поэтому я знаю, что метод на самом деледобавив информацию в список, даже две или три записи. Я очень озадачен, почему индекс выходит за границы.

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Длина массива на единицу больше, чем конечный индекс (индексы начинаются с 0)

public double getTotalGP() {
        for(int i = 0; i < this.semesterGPs.size(); i++)                        
            sumGP = sumGP + this.semesterGPs.get(i);                            
        return sumGP;   

Если массив имеет длину N, array[N] запустит индекс вне границошибка.

0 голосов
/ 24 октября 2019

В getTotalGP у вас есть i <= this.semesterGPs.size(). Однако это не будет работать, так как, когда i == this.semesterGPs.size(), this.semesterGPs.at(i) выйдет за пределы. Измените это условие на i < this.semesterGPs.size().

...