ý 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 ạ


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