【发布时间】:2020-11-12 08:06:02
【问题描述】:
我的代码应该打印出范围最大的学生。在我的 Student 课程中有一种方法可以计算范围,而在我的 Classroom 课程中有另一种方法可以确定哪个学生的增长最快。我的问题出现在 Student 类中,我在 addExamScore 方法中遇到了 Out of Bounds 异常。
主类:
public class ClassroomTester
{
public static void main (String[] args)
{
Classroom c = new Classroom(2);
Student ada = new Student("Ada", "Lovelace", 12);
ada.addExamScore(44);
ada.addExamScore(65);
ada.addExamScore(77);
Student alan = new Student("Alan", "Turing", 11);
alan.addExamScore(38);
alan.addExamScore(24);
alan.addExamScore(31);
c.addStudent(ada);
c.addStudent(alan);
c.printStudents();
Student mostImproved = c.getMostImprovedStudent();
System.out.println("The most improved student is " + mostImproved.getName());
}
}
学生班:
public class Student
{
private static final int NUM_EXAMS = 4;
private String firstName;
private String lastName;
private int gradeLevel;
private double gpa;
private int[] exams;
private int numExamsTaken;
public Student(String fName, String lName, int grade)
{
firstName = fName;
lastName = lName;
gradeLevel = grade;
exams = new int[numExamsTaken];
numExamsTaken = 0;
}
public int getExamRange()
{
int maximum = 0;
int minimum = 0;
for(int i = 0; i < exams.length; i++){
if(exams[i]<exams[minimum]){
minimum = i;
}
else if(exams[i]>exams[maximum]){
maximum = i;
}
}
return exams[maximum]-exams[minimum];
}
public String getName()
{
return firstName + " " + lastName;
}
public void addExamScore(int score)
{
exams[numExamsTaken] = score;
numExamsTaken++;
}
public void setGPA(double theGPA)
{
gpa = theGPA;
}
public String toString()
{
return firstName + " " + lastName + " is in grade: " + gradeLevel;
}
}
【问题讨论】:
-
您希望在
exams = new int[numExamsTaken];创建的数组大小?是什么让你这么认为? -
您不能通过将元素添加到下一个索引来增大数组。您应该更改为使用列表。
-
是的,正如其他 cmets 已经提到的 - 在 Java 中,数组具有 固定大小,它不能增长。为了允许添加更多元素,必须将数组内容复制到更大的新数组中。
ArrayList包装了一个数组,并在需要更多容量时自动增长。