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.

Xem code C tương ứng ở đây, code C và Java cơ bản giống nhau tới 99%.

2 Likes

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

1 Like

Lỗi như thế nào? Em ghi báo lỗi ra.

1 Like

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)

152 là ngay chỗ vòng while đó anh

1 Like

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ảng data ở 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.

3 Likes

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

1 Like

data[-1] không tồn tại nha em. :smile:

3 Likes

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

2 Likes

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.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?