ArrayIndexOutOfBounds, но размер массива установлен правильно
Я встретил эту ошибку во время вывода моей программы, и она сразу же заканчивается. Всего было отображено 8 ученических объектов. Ниже приведен фрагмент вывода, где была показана ошибка:
********************************************************************
********************************************************************
Student ID: 3
Student Title: Mrs
Student First Name: Sophie
Student Last Name: Chua
Student DOB: 3/3/2003
Assignment 1: 65
Assignment 2: 78
Practical: 7
Exam: 92
Overall: 81.6
Final Grade: HD
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 20
********************************************************************
********************************************************************
Student ID: 4
Student Title: Mrs
Student First Name: Brendon
Student Last Name: Low
Student DOB: 4/4/2004
Assignment 1: 95
Assignment 2: 98
Practical: 7
Exam: 69
at student.StudentClient.main(Overall: 80.1
StudentClient.java:420)
Final Grade: HD
********************************************************************
********************************************************************
Объявление объектов тестового массива:
Student[] studentList = new Student[8];
studentList[0] = new Student();
studentList[1] = new Student();
studentList[2] = new Student();
studentList[3] = new Student();
studentList[4] = new Student();
studentList[5] = new Student();
studentList[6] = new Student();
studentList[7] = new Student();
studentList[8] = new Student();
studentList[9] = new Student();
studentList[0].setStudent("Mr", "Jason", "Lee", 1, 1, 1, 2001, 85, 75, 8, 65, 72.5, "D");
studentList[1].setStudent("Miss", "Candice", "Teo", 2, 2, 02, 2002, 95, 95, 9, 90, 92.0, "HD");
studentList[2].setStudent("Mrs", "Sophie", "Chua", 3, 3, 03, 2003, 65, 78, 7, 92, 81.6, "HD");
studentList[3].setStudent("Mrs", "Brendon", "Low", 4, 4, 04, 2004, 95, 98, 7, 69, 80.1, "HD");
studentList[4].setStudent("Mr", "Clarance", "Yeo", 5, 5, 05, 2005, 80, 76, 5, 59, 65.7, "C");
studentList[5].setStudent("Mr", "Adrian", "Tan", 6, 6, 6, 2006, 70, 60, 4, 20, 40.0, "ND");
studentList[6].setStudent("Ms", "Debbie", "Toh", 7, 7, 7, 2007, 60, 60, 7, 50, 56.0, "P");
studentList[7].setStudent("Miss", "Sarah", "Ho", 8, 8, 8, 2008, 59, 61, 7, 62, 62.0, "N");
studentList[8].setStudent("Mr", "Aloysius", "Lim", 9, 9, 9, 2009, 62, 63, 8, 69, 67.5, "C");
studentList[9].setStudent("Mrs", "Peggy", "Lo", 10, 10, 10, 2010, 65, 67, 9, 72, 71.4, "D");
Метод BubbleSort:
public static void BubbleSort(Student[] st) {
Student temp; //holding variable
boolean changed = false;
for (int j = 0; j < st.length - 1; j++) {
if (st[j] != null) {
long studentID1 = st[j].getStudentID();
if (st[j + 1] != null) {
long studentID2 = st[j + 1].getStudentID();
if ((st[j] != null) && (st[j + 1] != null)) {
if (studentID1 > studentID2) // change to > for ascending sort
{
temp = st[j]; //swap elements
st[j] = st[j + 1];
st[j + 1] = temp; //shows a swap occurred
changed = true;
}
}
}
}
}
if (changed) {
BubbleSort(st);
}
}
Основной метод:
BubbleSort(studentList);
for (int i = 0; i <= studentList.length; i++) {
if (studentList[i] != null) {
studentList[i].writeOutput();
}
}
Я не встречал эту ошибку раньше, и я не уверен, какая часть моего кода, который вызвал эту ошибку. Ошибка отображалась, когда я запускал BubbleSort объектов ученика через Student ID и отображал их.
Пожалуйста, дайте мне знать, если для решения этой проблемы понадобятся дополнительные части моего кода. Спасибо
1 ответ
Решение
Длина массива не соответствует количеству элементов, которые вы пытаетесь вставить в него.
Student[] studentList = new Student[8]; // change to 10
studentList[0] = new Student();
studentList[1] = new Student();
studentList[2] = new Student();
studentList[3] = new Student();
studentList[4] = new Student();
studentList[5] = new Student();
studentList[6] = new Student();
studentList[7] = new Student();
studentList[8] = new Student(); // 8 is an invalid index for an array of length 8
studentList[9] = new Student(); // 9 is an invalid index for an array of length 8
Также изменить
for (int i = 0; i <= studentList.length; i++)
в
for (int i = 0; i < studentList.length; i++)