Cần giúp đỡ giải thích câu lệnh sau

ý tưởng ban đầu của mình là như thế này


tương tự các TH khác,
và mình dùng 1 mảng ArrayList< theco > mang để lưu
class thế cờ như sau

public class theco {

    private int x[][];

    theco(int x[][]) {
        this.x = x;

    }

    public int[][] getbanco() {
        return x;
    }

   public  void set_value(int x, int y, int a) {
        this.x[x][y] = a;
    }

    public void xuat() {
        for (int i = 0; i < this.x.length; i++) {

            for (int j = 0; j < this.x[i].length; j++) {
                System.out.print(this.x[i][j] + " ");
            }
            System.out.println();

        }
    }
}

Class cay với phương thức duyet(i) gây hiện tượng lạ khi được gọi tới

public class cay {
   private ArrayList<theco> mang;
   
   cay(theco r)
  {
      mang= new ArrayList<theco> ();     
      mang.add(0,r);
     
  }
   public void  duyet(int i)
   {
       theco cha=mang.get(i); // lấy ra bàn cờ gốc
  
       int map[][] = cha.getbanco();  // lấy ra bàn cờ gốc 
       
       for(int h=0;h<map.length;h++)
       {
           
           for(int c=0;c<map[0].length;c++)
           {
               if(map[h][c]==0)
               {
                       
                   theco con = new theco(map);  // tạo mới 1 thế cờ mới vào truyền cho nó map cha                                       
                   con.set_value(h, c, 2);  // set giá trị hàng cột =2;                
                   this.mang.add(this.mang.size(),con);
                   cha.xuat();
                   System.out.println("_____________________");
                   // con.xuat();
                   
               }
              
           }
       }
       
   }
   
    
}

class main

public class Main {

    public static void main(String[] args) {
        
        int map[][] = {{1,0,0} ,{0,0,0 } ,{0,0,0}};
        
        
        theco cha = new theco(map); //  khởi tạo 1 thế cơ ban đầu

        cay Cay_goc = new cay(cha); // khởi tạo 1 cây với gốc là thế cờ : cha_all

        Cay_goc.duyet(0);

    }

và mình gọi phương thức duyet(0) ở hàm main
lấy ra thế cờ tại vị trí ban đầu : theco cha=mang.get(i);
lấy ra 1 cái map : int map[][] = cha.getbanco();
khi vào hàm if(map[h][c] == 0)
thì mình có new ra 1 thế cờ mới tham số truyền vào map : theco con = new theco(map);
và set giá trị cho nó : con.set_value(h, c, 2);
Cái thắc măc tại sao thay giá trị map con thì map cha lại thay đổi
thử in ra thì giá trị như này
dẫn đến không đúng ý tưởng và không biết fix như thế nào nhờ mợi người giúp đỡ và fix lỗi với ạ

2 Likes

Chỗ nào là “map con”, chỗ nào là “map cha”?
Chả phải cái “map con” nó lấy từ “map cha” là tham chiếu. Bạn nên hiểu tham chiếu là gì.

4 Likes

ok bạn, cảm ơn …

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