01/10/2018, 11:50

Bài toán BattleShip trong HeadFirstJava

Em đang học lập trình Java trong sách HeadFirst và có đoạn này em chưa hiểu kĩ
Vì 3 class khá dài nên em chỉ post đoạn cần hỏi là class GameHelper:

public class GameHelper {

    private static final String alphabet = "abcdefg";
    private int gridLength = 7;
    private int gridSize = 49;
    private int[] grid = new int[gridSize];
    private int comCount = 0;

    public ArrayList<String> placeDotCom(int comSize) {
        ArrayList<String> alphaCells = new ArrayList<String>();
        String[] alphacoords = new String[comSize];
        String temp = null;
        int[] coords = new int[comSize];
        int attempts = 0;
        boolean success = false;
        int location = 0;

        comCount++;
        int incr = 1;
        if ((comCount % 2) == 1) {
            incr = gridLength;
        }
        while (!success & attempts++ < 200) {
            location = (int) (Math.random() * gridSize);
            System.out.println("try " + location);
            int x = 0;
            success = true;
            while (success && x < comSize) {
                if (grid[location] == 0) {
                    coords[x++] = location;
                    location += incr;
                    if (location >= gridSize) {
                        success = false;
                    }
                    if (x > 0 && (location % gridLength == 0)) {
                        success = false;
                    }
                } else {
                    System.out.println(" used " + location);
                    success = false;
                }
            }
        }
        int x = 0;
        int row = 0;
        int column = 0;
        System.out.println("
");
        while (x < comSize) {
            grid[coords[x]] = 1;
            row = (int) (coords[x] / gridLength);
            column = coords[x] % gridLength;
            temp = String.valueOf(alphabet.charAt(column));
            alphaCells.add(temp.concat(Integer.toString(row)));
            System.out.println(coords[x]);
            x++;
            System.out.println("coord "+x+"= "+ alphaCells.get(x-1));
            
        }
            return alphaCells;
    }

Chương trình sẽ tạo ra một khối 7x7 với số cột là A đến G và số hàng là từ 0 đến 6 và tạo một chiếc thuyền có 3 khối lần lượt theo thứ tự là dọc,ngang và dọc
nhưng khi e chạy chương trình thì vị trí 11 tăng ngang sẽ là 11,12,13 tương ứng E1,F1,G1 lại bị skip và không được tính
hoặc khi vị trí 6 tương ứng tăng dần là 6,13,20 thì chương trình cũng skip


Mọi người cho em hỏi bug này phải sửa thế nào ạ??
Và tại sao lại có bug này?

Code Đại Hiệp viết 13:59 ngày 01/10/2018

Ngày xưa có nghịch cái bài này nhưng làm không giống trong sách Bạn tham khảo thôi chứ còn câu hỏi kia mình đọc không hiểu bạn hỏi gì
https://drive.google.com/file/d/0B9q5Ji-i9gAzWXlsbWtOZ2JyVTQ/view?usp=sharing

Lã Thanh Dương viết 13:59 ngày 01/10/2018

Câu hỏi của em là theo code trong sách,vị trí 11 hoàn toàn đặt được 3 block ở cạnh nhau là 11,12,13 tương ứng ứng E1,F1,G1 nhưng khi em chạy thì try 11 lại bị skip và không được dùng như hình sau


Em đọc code của anh thì nhiều chỗ em ko hiểu rõ lắm nhưng hình như là hàm set tọa độ của anh là random ra số tọa độ
ví dụ (1,2).
Còn bài toán của em là một khối 7x7,là ArrayList có 49 phần tử từ 0 đến 48 xong mới cắt từng ô được đánh số ra tọa độ ví dụ như A3,B3

Lã Thanh Dương viết 13:55 ngày 01/10/2018

Có ai trả lời được hộ em không ạ

Bài liên quan
0