如何使我的 sum 方法(在列表上使用 for 循环)正常工作?
How to make my sum method, which uses a for loop on a list, work correctly?
我正在编写一个程序来计算 GPA 并打印成绩单。我为获得学期 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" 中的信息,所以我知道该方法实际上是将信息添加到列表中,甚至是两个或三个条目。我很困惑为什么索引越界。
在getTotalGP
中,你有i <= this.semesterGPs.size()
。但是,这将不起作用,因为当 i == this.semesterGPs.size()
、this.semesterGPs.at(i)
将超出范围。将该条件更改为 i < this.semesterGPs.size()
.
数组的长度比最终索引大一(索引从 0 开始)
public double getTotalGP() {
for(int i = 0; i < this.semesterGPs.size(); i++)
sumGP = sumGP + this.semesterGPs.get(i);
return sumGP;
如果数组的长度为 N
,array[N]
将触发索引越界错误。
我正在编写一个程序来计算 GPA 并打印成绩单。我为获得学期 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" 中的信息,所以我知道该方法实际上是将信息添加到列表中,甚至是两个或三个条目。我很困惑为什么索引越界。
在getTotalGP
中,你有i <= this.semesterGPs.size()
。但是,这将不起作用,因为当 i == this.semesterGPs.size()
、this.semesterGPs.at(i)
将超出范围。将该条件更改为 i < this.semesterGPs.size()
.
数组的长度比最终索引大一(索引从 0 开始)
public double getTotalGP() {
for(int i = 0; i < this.semesterGPs.size(); i++)
sumGP = sumGP + this.semesterGPs.get(i);
return sumGP;
如果数组的长度为 N
,array[N]
将触发索引越界错误。