Thay đổi giá trị của biến trong Java

Em có:

int [] a; List<int[]> puzzles = new ArrayList<>()

khai báo trong hàm main().

Em thêm a vào puzzles, sau đó em thay đổi giá trị biến a thì giá trị bên trong puzzles cũng bị thay đổi theo. Tại sao lại như vậy và khắc phục như thế nào?
Nhờ mọi người!

puzzles.add(a); // Them a vao ArrayList
info.add(new int[] {0, 0}); //Height: 0; farther: -1;
do{
    int index = puzzles.indexOf(a);
    if (info.get(index)[0] % depth != 0 || index == 0){
        a = Left(a);    // Thay doi gia tri cua a
1 Like

Trong Java, kiểu mảng và đối tượng là tham chiếu.
Bạn không muốn bị thay đổi thì tạo bản sao của a rồi thêm vào, không thêm trực tiếp a.

5 Likes

Cảm ơn b, vậy nếu mình khai báo 1 cái int[] b = a, puzzles.add(b) và đặt trong vòng lặp thì có đc ko b, hay vẫn bị tham chiếu

Thì b vẫn là a thôi bạn à. Ý mình là bạn phải khai báo mới 1 mảng b có số lượng phần tử bằng a, sau đó sao chép từng giá trị từ a sang b. Chỉ có cách đó mới làm b độc lập với a.

5 Likes

Vì đó là kiểu tham chiếu đó bạn, bạn có thể dùng hàm copy của java để copy value hoặc cung cấp constructer hay get/set cho class đó để tạo đối tượng mới add vào list, như vậy chúng ko tham chiếu cùng 1 đối tượng nữa

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