我正在編寫一個程序來計算 GPA 并打印成績單。我所創(chuàng)建的獲取學期平均績點總和的方法存在一些問題。這是相關代碼: 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 循環(huán)不斷拋出索引越界錯誤: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 回答

小怪獸愛吃肉
TA貢獻1852條經驗 獲得超1個贊
數組的長度比最終索引大1(索引從0開始)
public double getTotalGP() { for(int i = 0; i < this.semesterGPs.size(); i++) sumGP = sumGP + this.semesterGPs.get(i); return sumGP;
如果數組長度過N
大,array[N]
將觸發(fā)索引越界錯誤。

陪伴而非守候
TA貢獻1757條經驗 獲得超8個贊
在 中getTotalGP
,你有i <= this.semesterGPs.size()
. 然而,這是行不通的,因為什么時候i == this.semesterGPs.size()
,this.semesterGPs.at(i)
就會出界。將該條件更改為i < this.semesterGPs.size()
.
添加回答
舉報
0/150
提交
取消