Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查bishop的空对角线?_Java_Chess - Fatal编程技术网

Java 如何检查bishop的空对角线?

Java 如何检查bishop的空对角线?,java,chess,Java,Chess,我正在用java编写国际象棋,这段代码用于检查bishop是否有障碍,有时有效,有时无效。 你能解释一下我的错误吗 谢谢 public boolean checkifEmpty(int-fromRow,int-fromrolumn,int-toRow, 整数到列,图[][]棋盘){ int differenceInRows=Math.abs(fromRow-toRow); 如果(差异行==1){ 返回true; } 对于(int j=1;jfromRow)&(toColumn>fromColum

我正在用java编写国际象棋,这段代码用于检查bishop是否有障碍,有时有效,有时无效。 你能解释一下我的错误吗 谢谢

public boolean checkifEmpty(int-fromRow,int-fromrolumn,int-toRow,
整数到列,图[][]棋盘){
int differenceInRows=Math.abs(fromRow-toRow);
如果(差异行==1){
返回true;
}
对于(int j=1;jfromColumn)
&&棋盘[fromRow-j][fromColumn+j]==null){
返回true;
}else if((toRow>fromRow)&(toColumn>fromColumn)
&&棋盘[fromRow+j][fromColumn+j]==null){
返回true;
}如果((toRow>fromRow)和(&(toColumn
您已经很接近正确了,但是您的逻辑有一部分是错误的:当您发现一个空单元格时,您立即返回
true
,这是不正确的,因为在更远的地方可能还有一个非空单元格。如果你看到一个空单元格,你能得出什么结论?如果你看到一个非空单元格,你能得出什么结论?在以下哪种情况下,您可以确定答案应该是什么?

我正在建立@AasmundEldhuset答案: 你应该检查一下null并立即返回false。循环结束后,返回true,因为一切顺利。您还可以取消第一个if语句检查differenceInRows是否为1,因为如果差值为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;
}
public boolean checkifEmpty(int-fromRow,int-fromrolumn,int-toRow,
整数到列,图[][]棋盘){
int differenceInRows=Math.abs(fromRow-toRow);
对于(int j=1;jfromColumn)
&&棋盘[fromRow-j][fromColumn+j]!=null){
返回false;
}else if((toRow>fromRow)&(toColumn>fromColumn)
&&棋盘[fromRow+j][fromColumn+j]!=null){
返回false;
}如果((toRow>fromRow)和(&(toColumn
最后一个提示是教您如何进行fish而不是给您fish:您应该在IDE中使用调试器并逐步执行代码,直到找到bug为止。理想情况下,您应该使用JUnit或同等工具创建单元测试


快乐编程

使用棋盘[fromRow-j][fromColumn+j]怎么样null,当它遇到障碍时,它将立即返回true,而不是检查空单元格,我将搜索obstacles@user3505689:除了需要返回
false
或将该方法重命名为
checkIfBlocked
之外,这将起作用。
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;
}