如何使我的 sum 方法(在列表上使用 for 循环)正常工作?

我正在编写一个程序来计算 GPA 并打印成绩单。我所创建的获取学期平均绩点总和的方法存在一些问题。这是相关代码:


    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;   

以下是 main 方法中使用的代码块,以及相关的 main 方法代码:


        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”中的信息,所以我知道该方法实际上是将信息添加到列表中,甚至是两个或三个条目。我很困惑为什么索引超出范围。


繁星coding
浏览 68回答 2
2回答

小怪兽爱吃肉

数组的长度比最终索引大1(索引从0开始)public&nbsp;double&nbsp;getTotalGP()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;this.semesterGPs.size();&nbsp;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sumGP&nbsp;=&nbsp;sumGP&nbsp;+&nbsp;this.semesterGPs.get(i);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;sumGP;如果数组长度过N大,array[N]将触发索引越界错误。

陪伴而非守候

在 中getTotalGP,你有i <= this.semesterGPs.size().&nbsp;然而,这是行不通的,因为什么时候i == this.semesterGPs.size(),this.semesterGPs.at(i)就会出界。将该条件更改为i < this.semesterGPs.size().
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java