Tạo chương trình giải Sudoku 9x9


Em muốn tạo một chương trình có 1 bảng 9x9 như hình, sau khi ta nhập các số vào và bấm nút giải thì nó sẽ hiện lên bảng đáp án. Nhưng em không biết làm sao để từ dữ liệu người dùng nhập vào bảng chuyển thành mảng 2 chiều để giải ạ. hiện em đang dùng JTable và gặp rất nhiều rắc rối như:

  • Đang nhập dòng 1, em nhấn chuột xuống dòng 2 thì nó lấy hết dữ liệu dòng 1 đem xuống

  • Dữ liệu sau khi giải xong không update lên JTable được
    Liệu dùng JTable trong trường hợp này có đúng không ạ hay phải dùng một kiểu đối tượng khác ?

Em muốn tạo 1 bảng gồm các ô như vậy để người dùng nhập vào ạ. Rồi em chuyển vô mảng 2 chiều xử lí như bình thường

Vấn đề là do quá trình thao tác, bắt sự kiện với JTable.
Bạn cho mọi người xem các đoạn mã xử lý của bạn.

2 Likes


Đây là em khởi tạo Table & Button

Đây là sự kiện với table và button. table em chỉ dùng sự kiện khi nhấn chuột vào 1 ô.

Đây là hàm giải Sudoku của em dùng Backtracking. Khi có được đáp án em dùng setValueAt vào từng ô để cập nhật giá trị. Nhưng chương trình của em khi ko cập nhật lại đáp án đã tính. Em đổi sang in ra màn hình console đáp án thì chuong trình vẫn in ra được.

Vậy làm sao để cập nhật đáp án lên được ạ?

Bạn nên đăng mã (chép & dán), không nên chụp hình!


Mình thấy bạn “khổ sở” tạo đối tượng DefaultTableModel nhưng lại dùng duy nhất 1 đối tượng Vector để “nhân bản” cho nhiều dòng. Điều này sai bét! Bạn làm như thế thì khi thay đổi giá trị của 1 dòng thì tất cả các giá trị của các dòng khác cũng thay đổi theo y hệt (mặc dù trên giao diện chưa thể hiện rõ). Đó là lý do vì sao khi bạn thay đổi ô phía trên xong, nhấn vào ô dưới thì nó ra giá trị giống hệt.

DefaultTableModel dm = new DefaultTableModel(9, 9); // 9 dòng, 9 cột
Vector v1 = dm.getDataVector(); // Vector 2 chiều
Vector v2;
for(Object obj1 in v1){
    v2 = (Vector)obj1;
    for(Object obj2 in v2){
        // Từng ô.
    }
}

Nên nhớ: đưa mã lên thì chép và dán dạng văn bản, không nên chụp hình.

3 Likes

Cảm ơn anh nhiều lắm :>, đúng cái em gặp phải. Lần đầu show code nên em hơi ngu, làm anh khó nhìn rồi :d

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