如何检查主教的空对角线?

时间:2014-04-07 07:23:50

标签: java chess

我正在用java写国际象棋,这个代码用于检查天气,主教有时会有障碍,有些情况下也没有。 你能告诉我我的错误吗? 谢谢!

public boolean checkifEmpty(int fromRow, int fromColumn, int toRow,
            int toColumn, Figure[][] ChessBoard) {
        int differenceInRows = Math.abs(fromRow - toRow);
        if (differenceInRows == 1 ) {
            return true;
        }

        for (int j = 1; j < differenceInRows; j++) {
            if ((toRow < fromRow) && (toColumn > fromColumn)
                    && ChessBoard[fromRow - j][fromColumn + j] == null) {
                return true;
            } else if ((toRow > fromRow) && (toColumn > fromColumn)
                    && ChessBoard[fromRow + j][fromColumn + j] == null) {
                return true;
            } else if ((toRow > fromRow) && (toColumn < fromColumn)
                    && ChessBoard[fromRow + j][fromColumn - j] == null) {
                return true;
            } else if ((toRow < fromRow) && (toColumn < fromColumn)
                    && ChessBoard[fromRow - j][fromColumn - j] == null) {
                return true;
            }

        }
        return false;
    }

2 个答案:

答案 0 :(得分:2)

你非常接近正确,但是你的逻辑中有一部分是错误的:当你找到一个空单元时,你立即返回true,这是不正确的,因为那里可能仍然是一个非空的细胞。如果你看到一个空单元格,你可以得出什么结论?如果你看到一个非空单元格,你可以得出什么结论?在哪些情况下你能确定答案应该是什么?

答案 1 :(得分:1)

我正在建立@AasmundEldhuset答案: 您应该检查是否!= null并立即返回false。循环之后,只要一切顺利,就返回true。您还可以取消第一个if语句,检查differenceInRows是否为1,因为您不会再进入循环而不是一个。

更正后的代码:

public boolean checkifEmpty(int fromRow, int fromColumn, int toRow,
        int toColumn, Figure[][] ChessBoard) {
    int differenceInRows = Math.abs(fromRow - toRow);

    for (int j = 1; j < differenceInRows; j++) {
        if ((toRow < fromRow) && (toColumn > fromColumn)
                && ChessBoard[fromRow - j][fromColumn + j] != null) {
            return false;
        } else if ((toRow > fromRow) && (toColumn > fromColumn)
                && ChessBoard[fromRow + j][fromColumn + j] != null) {
            return false;
        } else if ((toRow > fromRow) && (toColumn < fromColumn)
                && ChessBoard[fromRow + j][fromColumn - j] != null) {
            return false;
        } else if ((toRow < fromRow) && (toColumn < fromColumn)
                && ChessBoard[fromRow - j][fromColumn - j] != null) {
            return false;
        }

    }
    return true;
}

最后一个注意事项,教你如何钓鱼而不是给你钓鱼:你应该在IDE中使用调试器并逐步完成代码直到找到错误。理想情况下,您应该使用JUnit或等效创建单元测试。

快乐的节目!