Hàm hoán đổi không hoán đổi 2 giá trị

Mọi người cho em hỏi tại sao khi chạy thì hàm bên dưới không swap ạ. Em cảm ơn

public void bubbleSort() {
        boolean check;
        do {
            check = false;
            for (int i = 0; i < array.length - 1; i++) {
                if (array[i] > array[i + 1]) {
                    swap(array[i], array[i+1]);
                }
            }
        } while (check);

    }

    public void swap(int i, int j){
        int temp= i;
        i=j;
        j=temp;
    }

Java đâu có truyền tham chiếu đâu :smiley:
Chỉ có tham trị với call-by-object-sharing.

6 Likes

Bạn chỉ truyền vào tham trị (pass by value) cho hàm nên không có gì thay đổi ở đây cả. Khi bạn gọi 1 function thì 1 stack frame được tạo ra sao chép tất cả các các giá trị bạn truyền vào vào một vùng nhớ tiếp theo trên stack và chỉ tương tác với vùng nhớ mới đó => cái biến ban đầu của bạn chả bị tác động gì cả nên nó giữ nguyên.

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