Java 如何检查bishop的空对角线?
我正在用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
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;
}