30/09/2018, 16:14
Lỗi ArrayIndexOutOfBoundsException khi hiện thực Insertion Sort
Hàm sắp xếp của mình bị lỗi gì vậy mọi người? Phép so sánh compareTo mình kiểm tra đúng rồi khi chạy lại báo lỗi ở vòng while
Đây là code của mình:
public void insertionSort(StudentNotes[] data) {
for (int i = 1; i < size; i++) {
int j = i-1;
StudentNotes temp = data[i];
while (data[j].compareTo(temp) > 0 && j >= 0) {
data[j + 1] = data[j];
j--;
}
data[j + 1] = temp;
}
}
Đây là thông báo lỗi:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at midExam.DatabaseDSA_Note.insertionSort(DatabaseDSA_Note.java:152)
at midExam.DatabaseDSA_Note.main(DatabaseDSA_Note.java:68)
Dòng 152 là ngay chỗ vòng while.
Bài liên quan
Xem code C tương ứng ở đây, code C và Java cơ bản giống nhau tới 99%.
giống nhau mà anh. bài của em viết bằng C chạy đúng rồi nhưng viết lại trên java lại bị lỗi
Lỗi như thế nào? Em ghi báo lỗi ra.
thông báo lỗi
152 là ngay chỗ vòng while đó anh
Lỗi này tức là trong lúc duyệt mảng, em đã duyệt vượt ra khỏi số lượng phần tử của mảng.
Nếu vậy thì
j
đã lớn hơn kích thước mảngdata
ở một thời điểm nào đấy. Em kiểm tra lại.P/S: Trong các bạn ở diễn đàn, có nhiều bạn hoạt động tích cực, các bạn sẽ sớm lên Level 3. Khi lên Level 3, các bạn hãy giúp Đạt sửa các câu hỏi lại sao cho phù hợp với nội dung topic.
Cảm ơn các bạn, có các bạn, chúng ta sẽ xây dựng được một cộng đồng học tập / thảo luận một cách thông minh hơn.
Có phải khi j = 0
j–; thì j = -1
quay lại kiểm tra đk data[j].compareTo(temp) > 0 không thấy data[-1] đúng không anh đạt
data[-1] không tồn tại nha em.
Cảm ơn anh em làm được rồi phải kiểm tra j >= 0 trước khi kiểm tra data[j].compareTo(temp) > 0
Tốt, nhưng em đừng đặt tên biến như vậy, bắt chước anh mà đặt tên biến kìa.