我正在用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;
}
答案 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或等效创建单元测试。
快乐的节目!